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.dev
的 WORKDIR
为 /usr/app/
,并且您正在将源代码复制到该目录中。
您的 docker-compose.yml
文件正在将卷映射到 /app
。
一个解决方案是将 WORKDIR
更改为 /app/
并重建您的图像。
使用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.dev
的 WORKDIR
为 /usr/app/
,并且您正在将源代码复制到该目录中。
您的 docker-compose.yml
文件正在将卷映射到 /app
。
一个解决方案是将 WORKDIR
更改为 /app/
并重建您的图像。