我创建了以下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" ]
构建和运行Docker镜像时,一切正常
然而,当我跑
时docker run -p 8080:8080 -v ~/projects/NodeJSExample/:/usr/src/app/ nodeexample
我得到了:
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)
如何配置Dockerfile以动态支持代码更改?
答案 0 :(得分:1)
您遇到的问题是您在容器的/usr/src/app/
文件夹中声明了一个卷。它的作用是用文件系统上的文件系统替换容器的文件夹,当然没有执行npm install
命令。
好像,你的Dockerfile是有效的,你可以这样分发它。但是出于本地开发目的,您不能在映像(Dockerfile)本身上运行npm install
。因此,您只需在容器启动时在本地npm install
上运行~/projects/NodeJSExample/
命令,就可以了。