我正在尝试使用dockerfile创建docker容器,其中script-entry.sh将在容器启动时执行,script-exit.sh在容器停止时执行。docker停止时运行脚本
入口点帮助完成了script-entry.sh在启动时运行的问题的第一部分。
我将如何确保在docker exit/stop上执行script-exit.sh?
我正在尝试使用dockerfile创建docker容器,其中script-entry.sh将在容器启动时执行,script-exit.sh在容器停止时执行。docker停止时运行脚本
入口点帮助完成了script-entry.sh在启动时运行的问题的第一部分。
我将如何确保在docker exit/stop上执行script-exit.sh?
docker stop
发送一个SIGTERM
信号给在Docker容器(入口脚本)内运行的主进程。所以你需要一种方法来捕捉信号,然后触发退出脚本。
见This link用于解释在信号捕获和一个例子(靠近页面末尾)
创建一个脚本,并将其保存为一个bash文件,它包含以下内容:
$CONTAINER_NAME="someNameHere"
docker exec -it $CONTAINER_NAME bash -c "sh script-exit.sh"
docker stop $CONTAINER_NAME
运行该文件而不是运行docker stop
,这应该可以做到。你也可以为它设置一个别名。
至于在Docker自身内部实现自动化,我从来没有见过它。祝你好运,如果这是你想要的道路。
它不回答这个问题。问题是:“一旦容器停止,如何执行脚本”,这与“如何执行脚本然后停止容器”不同。 – Auzias
Docker守护进程会记录所有内容,为什么不编写解析日志的脚本/程序,并且在偶数containerID停止时出现,执行您想要的脚本。 – Auzias
@Auzias有[event api](https://gliderlabs.com/blog/2015/04/14/docker-events-explained/)和['events'](https://docs.docker。 com/engine/reference/commandline/events /)命令,这将更适合于这样的任务 – Matt
@Auzias在停止事件之后也运行某些东西可能无法运行或中断。 – Matt