监视Docker卷中的文件更改

我有一个运行python脚本的docker容器:等待input请求并相应地处理数据。

因为我使用docker进行开发, 所以我希望只要更改该python文件的源代码(在我的机器中,而不是容器中),容器就会停止python脚本,并用新代码重新启动它。 因为现在我必须手动停止容器并重新启动它。 我也可以监视文件更改在我身边(而不是在容器内),但我想避免这种情况,并在容器内部进行。

我正在使用docker-compose的volumes选项来共享我的FS和容器之间的源代码。

为了监视文件的变化,我一直在使用看门狗 python模块中的watchmedo shell工具。 我只是有这个奇怪的问题,我不能注意到该Python源文件的文件更改,除非我从容器内部编辑它,而不是我的本地FS,即使它们使用volumes选项安装。

我感觉到这是与Docker的工作方式有关,也许是卷的事情。 我一直试图在网上阅读,但没有得到太多的运气。 有任何想法吗? 我完全卡住了!

编辑:这是一个更好地解释它的gif。 窗格的顶部连接到相同的容器,底部连接到我的本地机器。 所有窗格都指向同一个文件夹。 GIF

你可以让你的容器像这样运行(需要安装inotify):

 while true do inotifywait -e create -e modify /path/to/python/script pkill python python /path/to/python/script done 

基本上等待文件的变化,杀死机器上的python,再次运行脚本。 如果python脚本没有以任何方式在后台/ deamonized中运行,可以使用&像这样: python /path/to/python/script &

把它放到run.sh中,像这样添加到你的Dockerfile中

 COPY run.sh /run.sh CMD ["bash", "-l", "/run.sh"] 

…你应该很好。