gpt4 book ai didi

node.js - 为什么当我安装新的 npm 包时,我必须运行 "docker-compose down",然后运行 ​​ "docker-compose up --build"?

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:51 24 4
gpt4 key购买 nike

不应该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"]

还有我们的 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:

据我所知,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 (这隐藏了镜像中打包的版本)。

您没有提到更新 package.json 文件后如何运行 npm install。我的猜测是您直接在主机上运行它。如果正确,这就是您的问题:它不起作用,因为您的 node_modules 文件夹绑定(bind)到 docker 卷,而不是您的本地文件夹。您需要在容器内运行npm install,方法是执行docker-compose exec web npm install

关于node.js - 为什么当我安装新的 npm 包时,我必须运行 "docker-compose down",然后运行 ​​ "docker-compose up --build"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53088634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com