How to install nvm in docker?

后端 未结 14 938
陌清茗
陌清茗 2020-12-04 05:53

I am in the process of building a new Docker image and I\'m looking to get NVM installed so I can manage nodejs.

Reading the docs on how to install NVM they mention

相关标签:
14条回答
  • 2020-12-04 06:51

    This is based on the top answer and works in 2018:

    # Replace shell with bash so we can source files
    RUN rm /bin/sh && ln -s /bin/bash /bin/sh
    
    # Install base dependencies
    RUN apt-get update && apt-get install -y -q --no-install-recommends \
            apt-transport-https \
            build-essential \
            ca-certificates \
            curl \
            git \
            libssl-dev \
            wget
    
    ENV NVM_DIR /usr/local/nvm
    ENV NODE_VERSION 8.11.3
    
    WORKDIR $NVM_DIR
    
    RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash \
        && . $NVM_DIR/nvm.sh \
        && nvm install $NODE_VERSION \
        && nvm alias default $NODE_VERSION \
        && nvm use default
    
    ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
    ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
    

    Note that nvm is not a bash command, it is an alias. This can screw you up if you're relying on $PATH.

    0 讨论(0)
  • 2020-12-04 06:55

    Each RUN in a Dockerfile is executed in a different container. So if you source a file in a container, its content will not be available in the next one.

    That is why when you install an application and you need to do several steps, you must do it in the same container.

    With your example:

    ADD files/nvm_install.sh /root/
    RUN chmod a+x /root/nvm_install.sh && \
      /root/nvm_install.sh && \
      source /root/.bashrc && \
      cd /root && \
      nvm install 0.10.31
    
    0 讨论(0)
  • 2020-12-04 06:58

    Update 20/02/2020: This solution works if you're using a debian base image. If you're using ubuntu, see this answer.

    Here is the cleanest way to install nvm that I have found:

    SHELL ["/bin/bash", "--login", "-c"]
    
    RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
    RUN nvm install 10.15.3
    

    Explanation

    • The first line sets the Dockerfile's default shell to a bash login shell. Note: this means that every subsequent RUN, CMD, and ENTRYPOINT will be run under the current user (usually root), and source the ~/.bashrc file if run in the shell form.

    • The second line installs nvm with bash. When the script is run with bash, it appends to the ~/.bashrc file.

    • The third line installs a particular version of nodejs and uses it. The nvm, npm, and node commands are available because they are run via a bash login shell (see line 1).

    0 讨论(0)
  • 2020-12-04 06:58

    Based upon the suggestion in @Kuhess answer, I replaced the source command with the following in my Dockerfile

    RUN cat ~/.nvm/nvm.sh >> installnode.sh
    RUN echo "nvm install 0.10.35" >> installnode.sh
    RUN sh installnode.sh
    
    0 讨论(0)
  • 2020-12-04 06:58

    Here is my working version

    FROM ubuntu:14.04
    
    # Declare constants
    ENV NVM_VERSION v0.29.0
    ENV NODE_VERSION v5.0.0
    
    # Replace shell with bash so we can source files
    RUN rm /bin/sh && ln -s /bin/bash /bin/sh
    
    # Install pre-reqs
    RUN apt-get update
    RUN apt-get -y install curl build-essential
    
    # Install NVM
    RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash
    
    # Install NODE
    RUN source ~/.nvm/nvm.sh; \
        nvm install $NODE_VERSION; \
        nvm use --delete-prefix $NODE_VERSION;
    

    Took help from @abdulljibali and @shamisis answers.

    0 讨论(0)
  • 2020-12-04 06:59

    When you RUN bash... each time that runs in a separate process, anything set in the environment is not maintained. Here's how I install nvm:

    # Replace shell with bash so we can source files
    RUN rm /bin/sh && ln -s /bin/bash /bin/sh
    
    # Set debconf to run non-interactively
    RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
    
    # Install base dependencies
    RUN apt-get update && apt-get install -y -q --no-install-recommends \
            apt-transport-https \
            build-essential \
            ca-certificates \
            curl \
            git \
            libssl-dev \
            wget \
        && rm -rf /var/lib/apt/lists/*
    
    ENV NVM_DIR /usr/local/nvm # or ~/.nvm , depending
    ENV NODE_VERSION 0.10.33
    
    # Install nvm with node and npm
    RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash \
        && . $NVM_DIR/nvm.sh \
        && nvm install $NODE_VERSION \
        && nvm alias default $NODE_VERSION \
        && nvm use default
    
    ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
    ENV PATH      $NVM_DIR/v$NODE_VERSION/bin:$PATH
    
    0 讨论(0)
提交回复
热议问题