Docker:目标中未更新卷中的文件

Docker:目标中未更新卷中的文件,docker,docker-volume,Docker,Docker Volume,我是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的新手,我用这个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

我做错了什么

更新I:

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

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

看起来像是已知的问题

如果您使用像vim这样的编辑器,那么当您保存文件时,它会这样做 不直接保存文件,而是创建一个新文件并复制它 到位。这会破坏基于inode的绑定挂载。自从 保存文件会有效地更改inode,更改不会 传播到容器中。当容器重新启动时,新的 伊诺德。如果在位编辑文件,您应该会看到更改传播

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


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

“这是容器/usr/src/app中的目标目录。”是否缺少某些内容?否,容器中定义WORKDIR的目录是/usr/src/appI,意思是“这是我的主机目录/home/josecarlos/Workspace/nodejs/basketmetrics2”,有一个屏幕截图,但在“这是容器/usr/src/app中的目标目录“真的什么都没有。Ups,对不起!!!稍微向下一点,您可以从映射中看到一个屏幕帽。下面给出的答案可能是它,但我会与容器中的
docker exec-it bash
cat
/
vim
进行检查,以确保不是您的浏览器缓存在愚弄您。这似乎是我的问题,因为当我停止并再次运行容器时,我可以看到更新。谢谢你的帮助!!!你的主目录在哪里?我已经测试过它可以在本地磁盘绑定挂载上工作,如果主目录来自NFS挂载,则需要重新启动