首页 > 解决方案 > Docker:来自卷的文件未在目标中更新

问题描述

我是 Docker 的新手,我用这个 Dockerfile 创建了一个图像:

FROM node:8.12.0
LABEL version="1.0"
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "index.js"]

我运行图像并且它可以工作。但是,如果我在更新主机目录中的 index.js 时使用 WORKDIR 运行图像映射主机目录,则此更新不会传播到 WORKDIR。

我使用以下命令运行图像:

docker run --name basketmetrics -v /home/josecarlos/Workspace/nodejs/basketmetrics2:/usr/src/app -p 8080:8080 -d basketmetrics2/node-app:1.0

这是我的主机目录 /home/josecarlos/Workspace/nodejs/basketmetrics2

在此处输入图像描述

这是容器 /usr/src/app 中的目标目录。如果我检查容器,我可以看到主机目录与 WORKDIR 映射

在此处输入图像描述

我究竟做错了什么?

更新一:

我已经停止了我的容器并修改了我的主机目录中的文件 index.js。如果我再次运行图像,那么我可以看到更新的内容!!!

为什么我的内容没有即时更新?

标签: dockerdocker-volume

解决方案


看起来像已知问题。关联

如果您使用的是 vim 之类的编辑器,当您保存文件时,它不会直接保存文件,而是会创建一个新文件并将其复制到位。这会破坏基于 inode 的绑定挂载。由于保存文件有效地更改了 inode,因此更改不会传播到容器中。当容器重新启动时,新的 inode。如果您在适当的位置编辑文件,您应该会看到更改传播。

这是文件挂载的已知限制,无法修复。

进一步在评论中,您可以找到各种编辑器的一些解决方法。检查是否有任何工作


推荐阅读