如何在Docker容器中自动重启Golang应用程序?

时间:2019-10-16 05:07:13

标签: docker go docker-compose

我有带有Golang和Mongo的Docker容器。我想制作电报bot,并且我想在更改源代码时自动重新编译/重新运行go应用程序。 我尝试使用mitranim/gow,但没有用。

更改源代码后,我需要使用什么来自动重新运行go应用程序?对于nodejs,我似乎需要nodemon的任何东西,但是去吧

这里是我的docker-composedockerfile配置。

My host machine is win10

1 个答案:

答案 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"