我有一个docker容器,其中apache在前景中运行。在停止docker容器时,会向所有子进程发送SIGTERM,在我们的例子中是apache。
现在,我面临的问题是在接收SIGTERM信号时正常关闭apache。 Apache通常会立即终止当前请求,这是问题的主要原因。不知何故,我需要将SIGTERM信号转换为 SIGWINCH ,这最终会优雅地关闭服务器。
我在考虑编写某种包装脚本,但无法知道如何启动。
对此方面的任何建议都将非常感谢!
感谢。
答案 0 :(得分:0)
可以通过发出以下命令(如果需要更改tomcat路径)优雅地停止容器内的tomcat:
docker exec -it <container id / name> /usr/local/apache2/bin/apachectl -k graceful
对于你的评论,如果你想查看tomcat日志以防万一它没有在前台运行
docker exec -it <container id / name> tail -f tail -f /usr/local/apache2/logs/error_log
更新:根据评论。
从docker documentation,您可以指定停靠泊坞窗容器的时间。默认情况下,它只会等待10秒。
使用不同的超时停止容器:
docker stop -t <time in seconds> <container id/ name>
我相信,在停止时增加时间可能对你的情况有所帮助。
UPDATE2 在您的情况下发送自定义信号SIGWINCH
。有关详细信息,请参阅here。
docker kill -s SIGWINCH <apache container id / name>
<强> UPDATE3 强> 有关信号捕获的有用资源:
https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86#.qp68kskwd
http://www.techbar.me/stopping-docker-containers-gracefully/
希望这些有用。