尽管使用了卷,Docker 容器仍需要针对 server.js 中的每次更改进行重建

问题描述 投票:0回答:1

我正在开发一个 Node.js 后端项目,并使用 Docker 和 Docker Compose 进行设置。我的文件夹结构如下所示:

project-root/
│
├── server/
│   ├── Controllers/
│   ├── db/
│   ├── node_modules/
│   ├── Routers/
│   ├── server.js
│   ├── Dockerfile
│   ├── package.json
│   └── package-lock.json
├── docker-compose.yml
└── Client/

尽管在 docker-compose.yml 中使用卷将本地服务器文件夹映射到容器,但每次在 server.js 中进行更改时,我都需要重建 Docker 容器以使更改生效。我的期望是更改应该立即反映在正在运行的容器中,而无需重建,特别是因为我正在使用 nodemon 来监视文件更改。

docker-compose.yml:

version: '3.8'

services:
  api:
    build:
      context: ./server
      dockerfile: Dockerfile
    volumes:
      - ./server:/app
      - /app/node_modules
    ports:
      - "5000:5000"
    environment:
      - NODE_ENV=development
    command: npm start

Dockerfile

FROM node:16

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

包.json

{
  "scripts": {
    "start": "nodemon server.js"
  }
}

我希望容器自动拾取 server.js 文件(和其他文件)中的更改,而无需重建。我怎样才能实现这个目标?我的音量设置有问题,还是我遗漏了其他内容?

node.js docker docker-compose dockerfile nodemon
1个回答
0
投票

尝试正确安装

- /app/node_modules
。通过使用
:
定义另一个路径,您会缺少主机或客户端。就像您对
- ./server:/app
所做的那样。

此外,为了节省“构建时间”,您可以尝试使用层,它允许您利用 docker 的缓存。

FROM node:16 AS dependencies

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm install

FROM dependencies AS sourcecode

COPY . .

FROM sourcecode AS startblock

CMD ["npm", "start"]

现金层不会被重建,除非它们发生了变化。

© www.soinside.com 2019 - 2024. All rights reserved.