Node.js 使用docker compose处理节点模块
我正在使用docker compose构建一组连接的节点服务,无法找到处理节点模块的最佳方法。以下是完美世界中应该发生的事情:Node.js 使用docker compose处理节点模块,node.js,docker,npm,docker-compose,Node.js,Docker,Npm,Docker Compose,我正在使用docker compose构建一组连接的节点服务,无法找到处理节点模块的最佳方法。以下是完美世界中应该发生的事情: 在初始构建时,通过每个服务的Dockerfile在每个容器中完全安装node_模块 节点模块在初始加载(即功能)后缓存,因此npm仅在package.json发生更改时安装 安装npm模块有一个明确的方法——不管是需要重建还是有更简单的方法 现在,每当我npminstall--save一些模块,然后运行docker compose build或docker compos
install--save一些模块
,然后运行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
这行代码可能正在覆盖您的节点\u模块
目录:
# Bundle app source
COPY . .
如果在运行docker build
创建映像之前在主机上运行npm install
,则主机上有一个node\u modules
目录正在复制到容器中
我想做的是只复制单个代码目录和文件来解决这个问题,例如:
# Copy each directory and file
COPY ./src ./src
COPY ./index.js ./index.js
如果您有很多文件和目录,这可能会很麻烦,因此另一种方法是将node\u模块
添加到.dockergnore
文件中。这样,Docker在构建过程中就会忽略它。您在哪里运行安装--保存一些模块
?在你的机器上?您希望该模块安装在映像或主机中吗?现在,我将通过进入/api网关并在那里运行,在本地计算机上安装该模块。我希望在映像中安装模块(这样在运行容器时就可以访问)