Docker卷-更改未反映

时间:2020-07-06 03:11:27

标签: docker docker-compose docker-volume

使用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"]

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您的dockerfile.dev的{​​{1}}中有WORKDIR,您正在将源代码复制到该目录中。 您的/usr/app/文件正在将卷映射到docker-compose.yml

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