Docker容器关闭脚本

时间:2015-10-05 03:31:40

标签: php bash nginx docker

当容器关闭时,有没有办法让bash脚本执行?

用例:

  • 容器运行 nginx + php-fpm
  • 有一个 foo (项目)容器,它使用了 master 的卷和链接
  • ubuntu 14.04用作所有图像的基础

启动 foo 时,会在vhost配置文件中输入nginx(以及将项目添加到webroot等等)。

我们想要实现的是,当 foo 停止时,它将进行清理(删除vhosts文件,从webroot中删除项目等)。

设置 / etc / rcX / KX-cleanup 不起作用。

探索它的唯一另一个选择 - 是在无限循环中在entryscript中有一些bash-sigterm-listener(这会浪费宝贵的CPU周期吗?)

1 个答案:

答案 0 :(得分:3)

如" Docker and the PID 1 zombie reaping problem"和#34; Trapping signals in Docker containers",docker在docker stop / docker kill上发送SIGCHLD或SIGTERM。

如果您的foo应用可以监控这些信号,或者foo进程可以提供回调,则可以触发您想要的任何脚本。

process.on('SIGTERM', function() {
  console.log('shutting down...');
});

注意:

  

创建Dockerfile时,请确保使用ENTRYPOINTRUN命令的执行形式。
  否则,应用程序将作为/bin/sh -c的子命令启动,该子命令不传递信号   容器的PID1将是shell,您的应用程序将不会从docker kill命令接收任何信号。

注意:很快(2015年第4季度),docker 1.9将允许您的容器使用新的STOPSIGNAL dockerfile指令指定它想要响应的停止信号。请参阅PR 15307