我有一个运行python脚本的docker容器:等待输入请求并相应地处理数据。
由于我正在使用docker进行开发,我希望这样,每当我更改该python文件的源代码(在我的机器中,而不是容器中)时,容器将停止python脚本并重新启动它新代码。因为现在我必须手动停止容器并重新启动它。我也可以监视我身边的文件更改(而不是容器内部),但我想避免这种情况,并在容器本身内进行。
我正在使用docker-compose的volumes
选项来共享我的FS和容器之间的源代码。
要监视文件更改,我一直在尝试使用watchmedo python模块中的watchdog shell实用程序。 我只是有这个奇怪的问题,我无法注意到该python源文件的文件更改,除非我从容器内部而不是在我的本地FS中编辑它,即使它们与{{一起安装1}}选项。
我觉得这与docker的工作方式有关,也可能与音量有关。我一直试图在网上阅读,但没有太多运气。有任何想法吗?我完全陷入了困境!
编辑:这是一个更好地解释它的gif。窗格的顶部连接到同一个容器,底部两个连接到我的本地计算机。所有窗格都指向同一个文件夹。
答案 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"]
......你应该很好。