Docker 卷 - 未反映更改

Docker Volumes - Changes not reflected

使用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);
});

并保存,然后通过邮递员进行请求 我仍然看到“嘎嘎!!”而不是“Double Quack”。

我确实安装了 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"]

知道为什么会这样吗?

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

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