我正在使用docker-compose构建一组连接的节点服务,但无法找出处理节点模块的最佳方法。以下是完美世界应该发生的事情:
现在,每当我npm install --save some-module
并随后运行docker-compose build
或docker-compose up --build
时,我最终都会找不到实际安装的模块。
这是Dockerfiles之一
FROM node:latest
# Create app directory
WORKDIR /home/app/api-gateway
# Intall app dependencies (and cache if package.json is unchanged)
COPY package.json .
RUN npm install
# Bundle app source
COPY . .
# Run the start command
CMD [ "npm", "dev" ]
这是docker-compose.myl
version: '3'
services:
users-db:
container_name: users-db
build: ./users-db
ports:
- '27018:27017'
healthcheck:
test: exit 0'
api-gateway:
container_name: api-gateway
build: ./api-gateway
command: npm run dev
volumes:
- './api-gateway:/home/app/api-gateway'
- /home/app/api-gateway/node_modules
ports:
- '3000:3000'
depends_on:
- users-db
links:
- users-db
答案 0 :(得分:0)
看起来这一行可能会覆盖您的node_modules
目录:
# Bundle app source
COPY . .
如果您在运行npm install
之前在主机上运行docker build
来创建映像,则主机上的node_modules
目录将被复制到容器中。
我想解决此问题的方法是仅复制单个代码目录和文件,例如:
# Copy each directory and file
COPY ./src ./src
COPY ./index.js ./index.js
如果你有很多文件和目录,这会很麻烦,所以另一种方法是将node_modules
添加到你的.dockerignore
文件中。这种方式在构建期间被Docker忽略。