2016-03-05 110 views
5

我正在尝试使用dockerfile创建docker容器,其中script-entry.sh将在容器启动时执行,script-exit.sh在容器停止时执行。docker停止时运行脚本

入口点帮助完成了script-entry.sh在启动时运行的问题的第一部分。

我将如何确保在docker exit/stop上执行script-exit.sh?

+0

Docker守护进程会记录所有内容,为什么不编写解析日志的脚本/程序,并且在偶数containerID停止时出现,执行您想要的脚本。 – Auzias

+0

@Auzias有[event api](https://gliderlabs.com/blog/2015/04/14/docker-events-explained/)和['events'](https://docs.docker。 com/engine/reference/commandline/events /)命令,这将更适合于这样的任务 – Matt

+0

@Auzias在停止事件之后也运行某些东西可能无法运行或中断。 – Matt

回答

8

docker stop发送一个SIGTERM信号给在Docker容器(入口脚本)内运行的主进程。所以你需要一种方法来捕捉信号,然后触发退出脚本。

This link用于解释在信号捕获和一个例子(靠近页面末尾)

0

创建一个脚本,并将其保存为一个bash文件,它包含以下内容:

$CONTAINER_NAME="someNameHere" 
docker exec -it $CONTAINER_NAME bash -c "sh script-exit.sh" 
docker stop $CONTAINER_NAME 

运行该文件而不是运行docker stop,这应该可以做到。你也可以为它设置一个别名。

至于在Docker自身内部实现自动化,我从来没有见过它。祝你好运,如果这是你想要的道路。

+3

它不回答这个问题。问题是:“一旦容器停止,如何执行脚本”,这与“如何执行脚本然后停止容器”不同。 – Auzias