在主机上更改挂载卷中的文件时,不会在 docker 容器中触发文件系统事件

Posted

技术标签:

【中文标题】在主机上更改挂载卷中的文件时,不会在 docker 容器中触发文件系统事件【英文标题】:File system events not triggered in docker container when files in mounted volume are changed on the host 【发布时间】:2019-10-08 09:59:55 【问题描述】:

我想在文件更改时使用 nodemon 重新启动我的项目。我认为 nodemon 通过侦听 inotify 事件来触发重新加载 node.js 项目来工作。

项目在 docker 容器中运行,项目文件在挂载的卷中。

例如,从 docker 容器内部编辑项目文件时

docker-compose exec dev vim server.js

nodemon 正常工作并重新启动服务器。

但是,当使用在主机上运行的编辑器时,nodemon 不会获取更改并重新启动程序。

docker 容器中文件的内容确实发生了变化,所以我怀疑以这种方式编辑文件不会触发 FS 事件。

是否可以这样设置,以便在主机上编辑文件会导致 Docker 容器中发生文件系统事件?为什么这还没有发生?

平台信息: Docker for Windows (Hyper-V) node码头集装箱 WebStorm -- 基于主机的编辑器

【问题讨论】:

你是否阅读了关于如何Inotify on shared drives does not work 的 GitHub 问题并参与了警告 INOTIFY ON SHARED DRIVES DOES NOT WORK 的 docker 日志和故障排除指南? @Wyck 我现在有,谢谢! 【参考方案1】:

当 Docker 在 Hyper-V 中运行并且更改发生在主机上时,文件系统事件似乎不起作用。但是,可以通过在 nodemon 中启用轮询来解决这个限制:

nodemon -L server.js

在 WebStorm 中,最终被使用的完整命令是

docker-compose run dev node node_packages/nodemon/bin/nodemon.js -L server.js

更多信息: https://github.com/remy/nodemon#application-isnt-restarting

【讨论】:

以上是关于在主机上更改挂载卷中的文件时,不会在 docker 容器中触发文件系统事件的主要内容,如果未能解决你的问题,请参考以下文章

docker数据卷应用场景

Java 中的 FileLock 在 Docker 挂载卷中不起作用

在 Windows 主机上的 docker 容器内更改挂载文件夹中的文件权限

将 NFS docker 卷中的单个文件挂载到容器中

如何修改docker的nginx容器的配置

docker-tmpfs挂载