docker - 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。如果我再次运行图像,那么我可以看到更新的内容!!!
为什么我的内容没有即时更新?
解决方案
看起来像已知问题。关联
如果您使用的是 vim 之类的编辑器,当您保存文件时,它不会直接保存文件,而是会创建一个新文件并将其复制到位。这会破坏基于 inode 的绑定挂载。由于保存文件有效地更改了 inode,因此更改不会传播到容器中。当容器重新启动时,新的 inode。如果您在适当的位置编辑文件,您应该会看到更改传播。
这是文件挂载的已知限制,无法修复。
进一步在评论中,您可以找到各种编辑器的一些解决方法。检查是否有任何工作
推荐阅读
- javascript - 如何从下拉菜单中访问和存储选定的选项值
- html - 如何限制 DIV 的宽度
- asp.net - 在 ASP.NET MVC 5 中为 302 重定向返回 401 状态代码
- amazon-web-services - 有关 AWS 组织集成服务的问题
- javascript - 如何使用简单的 PHP 服务器直接从 JavaScript 打印
- css - 单选按钮颜色更改
- database - 将 IP 地址列入白名单
- python - 如何计算每月的第一个星期一;蟒蛇3.3+
- javascript - 如何将两个数组与每个数组中的数据组合成多个对象?
- python - 如何在 NP 数组中填充第三维?