首页 > 解决方案 > Docker-Compose + Volume + NodeJs - 保存时未反映更改

问题描述

目录结构

projectroot/
    docker-compose.yml
    frontend/
        Dockerfile
        src/
            node_modules
            package.json
            ....

项目根/前端/docker-compose.yml

services:
  frontend:
    build: ./frontend
    ports:
      - 3000:3000
    volumes:
      - ./frontend/src:/app/

Dockerfile

FROM node:12.18.3

COPY /src/package.json .

RUN npm install --save-dev

COPY /src .

EXPOSE 3000

CMD ["npm", "run", "dev"]

以上工作。我可以运行docker-compose up并且我的应用程序在localhost:3000.

但是,当我对 projectroot/frontend/pages/index.js 进行更改时,不会反映该更改。

我很困惑,因为我将 /src 的内容复制到 Dockerfile ( COPY /src .) 中的 /app 。如果我在其中运行容器并 bash,我会看到/app包含我的主机文件夹内容的/src文件夹。

如果我从中删除COPY命令Dockerfile,则读数只会循环以下内容:

$ docker-compose up
Recreating pricey_frontend_1 ... done
Attaching to pricey_frontend_1
frontend_1  |
frontend_1  | > src@1.0.0 dev /
frontend_1  | > cross-env NODE_ENV=development nodemon server.js
frontend_1  |
frontend_1  | [nodemon] 2.0.4
frontend_1  | [nodemon] to restart at any time, enter `rs`
frontend_1  | [nodemon] watching path(s): *.*
frontend_1  | [nodemon] watching extensions: js,mjs,json
frontend_1  | [nodemon] starting `npm run dev server.js`
frontend_1  |
frontend_1  | > src@1.0.0 dev /
frontend_1  | > cross-env NODE_ENV=development nodemon server.js "server.js"
*** loops until I kill it***

在我看来,删除 COPY 是有意义的,因为我想使用主机卷 src (这样我就可以更新它并立即反映在 localhost:3000 上的更改。我错过了什么?

标签: node.jsdockerdocker-compose

解决方案


推荐阅读