【问题标题】:Docker: Files from volume not updated in targetDocker:来自卷的文件未在目标中更新
【发布时间】:2018-10-19 17:06:37
【问题描述】:

我是 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。如果我再次运行图像,那么我可以看到内容更新了!!!

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

【问题讨论】:

  • "这是容器中的目标目录 /usr/src/app。"有什么遗漏吗?
  • 不,容器中定义WORKDIR的目录是/usr/src/app
  • 我的意思是在“这是我的主机目录/home/josecarlos/Workspace/nodejs/basketmetrics2”下面,有一个截图,但是在“这是容器中的目标目录/usr/src /app" 实际上什么都没有。
  • 起来,对不起!!!稍微往下一点,您可以从映射中看到屏幕截图。
  • 下面给出的答案可能是它,但我真的会检查容器内的docker exec -it basketmetrics bashcat / vim,以确保它不是你的浏览器缓存,这是在愚弄你。

标签: docker docker-volume


【解决方案1】:

看起来像已知问题。 Link

如果您使用的是 vim 之类的编辑器,则在保存文件时会执行此操作 不直接保存文件,而是创建一个新文件并复制它 到位。这会破坏基于 inode 的绑定挂载。自从 保存文件有效地改变了 inode,改变不会 传播到容器中。当容器重新启动时,新的 索引节点。如果您在原地编辑文件,您应该会看到更改传播。

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

在 cmets 中,您还可以找到一些适用于各种编辑器的解决方法。检查是否有效

【讨论】:

  • 看来这是我的问题,因为当我停止并再次运行容器时,我可以看到更新。谢谢你的帮助!!!
  • 您的主目录在哪里?我已经测试过它可以在本地磁盘绑定挂载上运行,如果主目录来自 NFS 挂载,则需要重新启动
猜你喜欢
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2023-03-20
  • 2016-11-18
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多