James Hameson
James Hameson

Reputation: 341

Development env NodeJS and Docker

I created the following Dockerfile

ROM node:argon

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]

Everything works fine when I build and run the Docker image

However, when I run

docker run -p 8080:8080 -v ~/projects/NodeJSExample/:/usr/src/app/ nodeexample

I got :

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/usr/src/app/server.js:3:17)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)

How can I configure Dockerfile to support code changes dynamically?

Upvotes: 0

Views: 242

Answers (1)

Alexandre FILLATRE
Alexandre FILLATRE

Reputation: 1327

The problem you're facing is that you declare a volume on your container's /usr/src/app/ folder. What it does is that it replaces your container's folder by the one on your filesystem, which certainly did not have the npm install command executed.

As if, your Dockerfile is valid, and you can distribute it like that. But for local development purpose, you can't have the npm install be run on the image (Dockerfile) itself. So you only need to run the npm install command on your local ~/projects/NodeJSExample/ while your container is up, and you're good to go.

Upvotes: 1

Related Questions