当容器关闭时,有没有办法让bash脚本执行?
用例:
启动 foo 时,会在vhost配置文件中输入nginx(以及将项目添加到webroot等等)。
我们想要实现的是,当 foo 停止时,它将进行清理(删除vhosts文件,从webroot中删除项目等)。
设置 / etc / rcX / KX-cleanup 不起作用。
探索它的唯一另一个选择 - 是在无限循环中在entryscript中有一些bash-sigterm-listener(这会浪费宝贵的CPU周期吗?)
答案 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时,请确保使用
ENTRYPOINT
或RUN
命令的执行形式。
否则,应用程序将作为/bin/sh -c
的子命令启动,该子命令不传递信号 容器的PID1将是shell,您的应用程序将不会从docker kill
命令接收任何信号。
注意:很快(2015年第4季度),docker 1.9将允许您的容器使用新的STOPSIGNAL
dockerfile指令指定它想要响应的停止信号。请参阅PR 15307。