我的目标是设置一个Docker容器,当从主机检测到文件更改时,该容器会自动重启NodeJS服务器。
我已选择nodemon来查看文件以进行更改。
在Linux和Mac环境中,nodemon和docker正在完美运行。
但是,当我在 Windows环境时,nodemon不会重新启动服务器。
文件在主机上更新,并使用docker-compose.yml文件中的volumes
参数进行链接。
运行docker exec <container-name> cat /path/to/fileChanged.js
时,我可以看到文件已更改。这样我知道文件正确链接并且已在容器中修改过。
为什么nodemon没有为Windows重新启动服务器?
答案 0 :(得分:27)
使用nodemon --legacy-watch
轮询文件更改,而不是侦听文件系统事件。
VirtualBox doesn't pass file system events over the vboxfs share到您的Linux VM。如果您使用Docker for Windows,则看起来HyperV也不会传播文件系统事件。
答案 1 :(得分:0)
答案 2 :(得分:0)
这是Windows的docker中的问题。现在已修复
https://www.docker.com/blog/new-filesharing-implementation-in-docker-desktop-windows/
答案 3 :(得分:0)
正如其他人所提到的,使用 node --legacy-watch
会起作用,但是,默认的轮询率会对您的 CPU 造成很大负担。就我而言,它仅通过循环遍历项目中的所有文件就消耗了我 30% 的 CPU。我建议您指定@Sandokan El Cojo 提到的轮询间隔。
您可以通过将 "pollingInterval": 4000
(在本例中为 4 秒)添加到您的 nodemon.json 文件或在命令中使用 -P
或 --polling-interval
标志指定它来实现。< /p>