在主机上更改挂载卷中的文件时,不会在 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 容器中触发文件系统事件的主要内容,如果未能解决你的问题,请参考以下文章
Java 中的 FileLock 在 Docker 挂载卷中不起作用