Mar*_*ira 2 node.js npm node-modules docker docker-compose
应该docker-compose up --build不够?
这是我们的 Dockerfile:
FROM node:8.12.0-alpine
# Set app directory
WORKDIR /usr/src/app
# Install git in order to allow installing
# npm packages from Github
RUN set -xe \
&& apk add --no-cache git
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
ENV NODE_ENV development
EXPOSE 8080
CMD ["npm","start"]
Run Code Online (Sandbox Code Playgroud)
还有我们的 docker-compose 文件:
version: '3'
services:
web:
build: .
ports:
- 8080:8080
environment:
MONGODB_URI: mongodb://admin:app@mongo:27017/app?authSource=admin
volumes:
- .:/usr/src/app
# More info on the node_modules volume at:
# http://jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html
# under "The node_modules Volume Trick"
- /usr/src/app/node_modules
# Run nodemon with legacy watch
# https://github.com/remy/nodemon#application-isnt-restarting
# Ignore public/ because generating documentation programatically
# on startup was causing an infinite loop
command: ./node_modules/.bin/nodemon --legacy-watch --inspect=0.0.0.0:5858 --ignore public/
depends_on:
- mongo
mongo:
image: mongo:4.0
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: app
volumes:
# Using a named volume because windows doesn't deal well with mounting local folders
- app-api-mongodb-storage:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: app
depends_on:
- mongo
volumes:
# Database named module has to be declared globally
app-api-mongodb-storage:
Run Code Online (Sandbox Code Playgroud)
据我所知,docker-compose down应该删除 node_modules 卷,因为它是由docker-compose up.
是否有某种缓存阻止 package.json 被刷新,除非docker-compose --build用于显式重建 Docker 映像?
使用您当前的设置,在映像构建时您正在运行npm install,它会在映像内创建并填充 node_modules 文件夹。
当您从此映像启动容器时,使用当前的 docker-compose.yml 文件,docker 创建一个新的随机命名的卷,将映像的 node_modules 文件夹中的内容复制到这个新卷中,并将该卷挂载到 node_modules 文件夹中。
您对 package.json 的更新将在容器中可见,因为您将当前文件夹安装为 /usr/src/app(这会隐藏图像中打包的版本)。
您没有提到npm install更新 package.json 文件后的运行方式。我的猜测是您直接在主机上运行它。如果正确,这就是您的问题:它不起作用,因为您的 node_modules 文件夹绑定到 docker 卷,而不是您的本地文件夹。您需要npm install在容器内运行,通过执行类似docker-compose exec web npm install.
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |