【发布时间】:2021-04-11 13:25:10
【问题描述】:
问题如下。我们有一个项目,其中有几个使用 docker compose 运行的服务。
当我们中的一个人使用npm install <module name> --save 添加一个新模块时,package*.json 文件将被更新,并且该模块将被安装在 node_module 文件夹中。
在这里,运行docker-compose up --build 一切正常。
然而,当其他人拉取 package*.json 文件的更新版本并尝试运行docker-compose up --build 时,Docker 会输出找不到模块的错误。
好像本地的 node_module 文件夹直接复制到了 Docker 容器中。
问题是我们如何才能使 package*.json 文件中所有需要的节点模块都安装在容器中,而不仅仅是复制?
这是一个 DOCKERFILE:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD npm run devStart
以及 docker-compose.yaml 文件:
version: "3"
services:
list-service:
build:
context: ./list-service
dockerfile: Dockerfile
ports:
- "4041"
volumes:
- ./list_service:/usr/src/app
#- /usr/src/app/node_modules
user-service:
build:
context: ./user_service
dockerfile: Dockerfile
ports:
- "4040"
volumes:
- ./user_service:/usr/src/app
# - /usr/src/app/node_modules
api-gateway:
build:
context: ./api_gateway
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./api_gateway:/usr/src/app
# - /usr/src/app/node_modules
date_list-service:
build:
context: ./date_list_service
dockerfile: Dockerfile
ports:
- "4042"
volumes:
- ./date_list_service:/usr/src/app
# - /usr/src/app/node_modules
mongo:
container_name: mongo
image: mongo
command: mongod --port 27018
volumes:
- data:/data/db
volumes:
data:
我们确实已经有一个 .dockerignore 文件:
node_modules
npm-debug.log
更新
@DazWilkin 认识到我们将上下文挂载到容器中。这会用本地内容覆盖图像内容。我们这样做是因为我们使用 nodemon。因此,我们可以即时看到代码的变化。是否有可能从这里排除 node_modules 目录?
【问题讨论】:
标签: node.js docker npm docker-compose node-modules