首页 > 解决方案 > Docker 卷 - 未反映更改

问题描述

使用 node.js

我遇到了 docker 卷的问题。我在 docker-compose.yml 文件中设置了一个卷,但由于某种原因,我在本地进行的更改没有得到反映。知道为什么吗?

我有当前的 docker-compose.yml 文件

version: "3"
services:
  posts:
    build:
      dockerfile: Dockerfile.dev
      context: ./posts
    ports:
      - "4000:4000"
    volumes:
      - /app/node_modules
      - ./posts:/app
  ...// more services here

摘自帖子中的 index.js

app.get("/posts", (req, res) => {
  console.log("Quackss!");
  res.send(posts);
});

现在让我说我跑

docker-compose up --build posts

当我通过邮递员向 /posts 提出第一个请求时,我看到“Quackss!” 在我的控制台中。

现在当我将代码更改为

app.get("/posts", (req, res) => {
  console.log("Double Quack");
  res.send(posts);
});

并保存,然后通过邮递员提出请求我仍然看到“嘎嘎!!” 而不是“双嘎”。

我确实有 nodemon 设置,所以我认为这不是问题。

我跑去docker ps查看容器的名称然后运行docker exec -it <container name> sh 如果cat index.js 卷设置正确,我希望看到

app.get("/posts", (req, res) => {
  console.log("Double Quack");
  res.send(posts);
});

相反,我看到了原版

app.get("/posts", (req, res) => {
  console.log("Quackss!");
  res.send(posts);
});

这是我的帖子 package.json

{
  "name": "posts",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.2",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "nodemon": "^2.0.4"
  }
}

和 dockerfile.dev

FROM    node:alpine
WORKDIR /usr/app/
COPY    ./package.json ./
RUN     npm install
COPY    ./ ./
CMD     ["npm", "start"]

知道为什么会这样吗?

标签: dockerdocker-composedocker-volume

解决方案


dockerfile.dev有一个WORKDIR/usr/app/并且您正在将源代码复制到该目录中。您的docker-compose.yml文件正在将卷映射到/app

一种解决方案是更改WORKDIR/app/并重建您的图像。


推荐阅读