2015-10-05 34 views
2

当关闭一个容器时,有没有办法让bash脚本执行?码头集装箱关闭脚本

使用案例:

  • 有一个容器中运行的nginx + PHP-FPM
  • 有一个FOO(项目),其使用量和链接主容器
  • ubuntu 14.04用作所有图像的基础

开始就扑通一声在nginx的使用虚拟主机配置文件(以及添加项目到根目录,等等,等等)

我们要实现的是什么,当FOO停止它会做一个清理(删除虚拟主机文件,删除从根目录的项目等)

设置的/ etc/RCX/KX-清理不起作用。

唯一的其他选项探索看来 - 是有在entryscript一些的bash-SIGTERM监听无限循环(将这种浪费宝贵的CPU周期?)

回答

3

正如在“Docker and the PID 1 zombie reaping problem”提到和“ Trapping signals in Docker containers“,码头在docker stop/docker kill上发送SIGCHLD或SIGTERM。

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

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

注:

当创建一个Dockerfile,确保您使用的ENTRYPOINTRUN命令EXEC形式。
否则,应用程序将作为/bin/sh -c的子命令启动,该命令不传递信号。
容器的PID1将是shell,您的应用程序将不会收到来自docker kill命令的任何信号。

注:不久(2015年第4季度),搬运工1.9将允许您的容器指定就是了反应,与新STOPSIGNAL dockerfile指令停止信号。见PR 15307

+0

感谢您指出文章 –