If you’re trying to deploy your node app into a docker container and you’re also
using docker-compose, here’s something to watch out for.
If you are running
npm install on your
Dockerfile, you might want to
make sure that you mount /node_modules as a data volume in your
For eg. your
Dockerfile might look something like this:
# Dockerfile FROM node:5.5.0 ADD ./ /node_app WORKDIR /node_app RUN npm install
Normal stuff. Mount your app from the host to your container and install the npm
dependencies. Nothing should go wrong right?
Unfortunately, if you also use docker-compose to bring up other services
together with your node app, your compose might look something like:
#docker-compose.yml node: build: . command: node /node_app/dist/index.js links: - db volumes: - ./:/node_app db: image: rethinkdb
If you run
docker-compose up you might encounter issues of missing modules
even though npm install ran successfully and you’re sure every dependency is
This is because the mounting of the volume by docker-compose would supercede the
node_modules that was installed in your built image. This causes the volume to
overwrite ontop of the built image.
In order to overcome this, you’ll need to make sure that you mount the directory
as a data volume.
docker-compose.yml, just change:
# docker-compose.yml node: ... volumes: - ./:/node_app - /node_app/node_modules
Now if you run your
docker-compose up, you should be able to see your node
application running successfully now.