Skip to content

Instantly share code, notes, and snippets.

@remarkablemark
Last active April 24, 2024 13:40
Show Gist options
  • Save remarkablemark/aacf14c29b3f01d6900d13137b21db3a to your computer and use it in GitHub Desktop.
Save remarkablemark/aacf14c29b3f01d6900d13137b21db3a to your computer and use it in GitHub Desktop.
Install node and npm with nvm using Docker.
#!/usr/bin/env bash
# confirm docker daemon is running and connected
docker version
# build the image based on the Dockerfile and name it `nvm`
docker build -t nvm .
# confirm image is present
docker images
# enter container terminal
docker run -it nvm bash
# set the base image to Debian
# https://hub.docker.com/_/debian/
FROM debian:latest
# replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
# update the repository sources list
# and install dependencies
RUN apt-get update \
&& apt-get install -y curl \
&& apt-get -y autoclean
# nvm environment variables
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 4.4.7
# install nvm
# https://github.com/creationix/nvm#install-script
RUN curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash
# install node and npm
RUN source $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
# add node and npm to path so the commands are available
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
# confirm installation
RUN node -v
RUN npm -v
@Ihor-Kokhan
Copy link

Ihor-Kokhan commented Sep 1, 2022

grinsteindavid commented 7 days ago
How to install nvm in Docker / devcontainer
FROM mcr.microsoft.com/vscode/devcontainers/cpp:ubuntu-20.04
RUN mkdir /usr/local/nvm
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.18.1
RUN curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/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/versions/node/v$NODE_VERSION/bin:$PATH
it worked for me

+1 Thanks

@jonathantito
Copy link

How to install nvm in Docker / devcontainer

FROM mcr.microsoft.com/vscode/devcontainers/cpp:ubuntu-20.04

RUN mkdir /usr/local/nvm
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.18.1
RUN curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/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/versions/node/v$NODE_VERSION/bin:$PATH

it worked for me

THANKS!!!! :)

@aviadhahami
Copy link

If anyone still finding themselves wondering here, I made a working gist with the above + python2.7 for old-timer apps
https://gist.github.com/aviadhahami/910b7f51f9fd53b4a3624f888b2981c9

@AlexAtkinson
Copy link

You can add the nvm to your docker-entrypoint.sh file. This will make nvm/npm work in any login, even /bin/sh. The exception is when using the image in a multi-stage build. See below.

. "$NVM_DIR/nvm.sh"
exec "$@" # Last line

Include it like:

COPY docker-entrypoint.sh .
ENTRYPOINT [ "/docker-entrypoint.sh" ]

Images setup with NVM that are used in a multi-stage build require nvm to be setup manually.

FROM some_nvm_image

RUN \. "$NVM_DIR/nvm.sh" \
    && npm --version \
    && node --version

But don't put a lot of time on such problems. NVM is a localdev tool. If you're building for production, either use an official node docker image, or borrow their Dockerfile to build your own.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment