监视Docker卷中的文件更改

时间:2015-05-26 11:52:07

标签: docker docker-compose

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

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

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

要监视文件更改,我一直在尝试使用watchmedo python模块中的watchdog shell实用程序。 我只是有这个奇怪的问题,我无法注意到该python源文件的文件更改,除非我从容器内部而不是在我的本地FS中编辑它,即使它们与{{一起安装1}}选项。

我觉得这与docker的工作方式有关,也可能与音量有关。我一直试图在网上阅读,但没有太多运气。有任何想法吗?我完全陷入了困境!

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

1 个答案:

答案 0 :(得分:3)

你可以让你的容器运行这样的东西(需要安装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"]

......你应该很好。