【问题标题】:Docker Volumes - Changes not reflectedDocker 卷 - 未反映更改
【发布时间】:2020-07-06 03:11:27
【问题描述】:

使用 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 提出第一个请求时 我看到“嘎嘎!”在我的控制台中。

现在当我将代码更改为

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

知道为什么会这样吗?

【问题讨论】:

  • 您将卷映射到 /app,但您将代码放在 /usr/app 的容器中。因此,您正在运行的代码和您安装的代码是不一样的。尝试将您的卷安装到 /usr/app

标签: docker docker-compose docker-volume


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2016-10-13
    • 2014-07-12
    相关资源
    最近更新 更多