13

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

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

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

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

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

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

4

1 回答 1

4

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

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

于 2015-11-02T01:20:47.163 回答