我有带有Golang和Mongo的Docker容器。我想制作电报bot,并且我想在更改源代码时自动重新编译/重新运行go应用程序。 我尝试使用mitranim/gow,但没有用。
更改源代码后,我需要使用什么来自动重新运行go应用程序?对于nodejs,我似乎需要nodemon的任何东西,但是去吧
这里是我的docker-compose和dockerfile配置。
My host machine is win10
答案 0 :(得分:0)
Linux上大多数文件监视工具都将其作为首选机制inotify。您提到的mitranim/gow工具似乎属于同一类别。
问题在于Windows中对文件系统的更改不会导致Linux guest虚拟机发布事件。这是预料之中的,因为Windows无法“知道”已设置的监视,因此当文件更改时无法通知Linux容器。对于虚拟化环境或其他跨平台/网络文件系统共享解决方案来说,这是一个常见问题。
您可能需要查看类似的问题:Inotify on shared drives does not work
该问题的可能解决方案是使用轮询。 nodemon
具有legacyWatch
标志,并且在文件更改时可以运行任何命令:
在某些联网环境中(例如运行nodemon的容器 读取已安装的驱动器),则需要使用legacyWatch: true启用Chokidar的轮询。
示例:
nodemon --legacy-watch <working-dir> -e go --exec "go run main.go"
或者在nodemon
检测到文件更改(有点黑)时触摸nodemon
来与其他监视工具结合使用:
nodemon --legacy-watch <working-dir> -e go --exec "touch main.go"