1

我有一个在前台运行 apache 的 docker 容器。在停止 docker 容器时,一个 SIGTERM 被发送到所有子进程,在我们的例子中是 apache。

现在,我面临的问题是在接收到 SIGTERM 信号时优雅地关闭 apache。Apache 通常会立即终止当前请求,这是问题的主要原因。不知何故,我需要将 SIGTERM 信号转换为SIGWINCH,这最终会优雅地关闭服务器。

我正在考虑编写某种包装脚本,但不知道如何开始。

在这方面的任何建议将不胜感激!

谢谢。

4

1 回答 1

1

可以通过发出以下命令优雅地停止容器内的 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 文档中,您可以指定停止 docker 容器的时间。默认情况下,它只会等待 10 秒。

要停止具有不同超时的容器:

docker stop -t <time in seconds> <container id/ name>

我相信,在停止时增加超时时间可能会对您的情况有所帮助。

SIGWINCH在您的情况下, UPDATE2发送自定义信号。请参阅此处了解更多详情。

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/

希望这些是有帮助的。

于 2016-10-28T06:45:18.483 回答