如何修复:Docker 的 Apache httpd 容器意外关闭(SIGTERM)

Posted

技术标签:

【中文标题】如何修复:Docker 的 Apache httpd 容器意外关闭(SIGTERM)【英文标题】:How to fix: Apache httpd container for Docker shuts down unexpectedly (SIGTERM) 【发布时间】:2019-12-09 19:38:31 【问题描述】:

我正在使用 httpd:alpine 容器来部署在 Angular 上开发的网站,而不使用 Node(由于生产环境中的一些限制)。我其实是用this amazing guide by Andreas Lorenzen作为基础的,特别是文末指定的Dockerfile。

问题是,在执行一段时间后,容器突然停止而无法自行重新启动。我从 'docker logs' 收到的唯一信息如下:

127.0.0.1 - - [29/Jul/2019:14:51:20 +0000] "GET / HTTP/1.1" 200 883
127.0.0.1 - - [29/Jul/2019:14:51:25 +0000] "GET / HTTP/1.1" 200 883
127.0.0.1 - - [29/Jul/2019:14:51:31 +0000] "GET / HTTP/1.1" 200 883
127.0.0.1 - - [29/Jul/2019:14:51:37 +0000] "GET / HTTP/1.1" 200 883
[Mon Jul 29 14:51:44.042754 2019] [mpm_event:notice] [pid 1:tid 139803211808072] AH00491: caught SIGTERM, shutting down

关于为什么会发生这种情况的任何想法?我试图在容器中查找 Apache 日志,但找不到任何...谢谢!

【问题讨论】:

在 apache 宕机之前你会更改任何文件吗? 嗨@LinPy!恐怕不会,我只是让 httpd 容器运行。如果我要更改任何内容,我会从头开始重建并重新启动所有内容。 【参考方案1】:

已修复!

Dockerfile 包含一个健康检查命令,即:

HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1

因此,在检查因任何原因失败后,容器就被杀死了。从 Dockerfile 中删除该行,或者更好的是,指示 Docker 在容器死亡时自动重启容器。

【讨论】:

【参考方案2】:

询问您的托管服务提供商。他们可能会将SIGTERM 发送到您的容器。见related answer,感谢@kdgregory

SIGTERM 用于重启 Apache(前提是它在 init 中设置为自动重启):http://httpd.apache.org/docs/2.2/stopping.html

【讨论】:

您好,感谢您的快速回复。但是我没有托管服务提供商,这是在我自己的环境中的 Docker 容器上运行的。事实上,我在发布问题之前查看了该主题,但我认为它不适用于这里......

以上是关于如何修复:Docker 的 Apache httpd 容器意外关闭(SIGTERM)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复将字节码转换为 dex 的错误原因:com.android.dex.DexException:多个 dex 文件定义 Lorg/apache/http/conn/ssl/AbstractVer

在 Docker 中使用 Apache HTTP 服务器开发时如何解决文件权限问题?

Oracle HTTP Server (OHS) Apache 2.2.13 Poodle SSLv3 修复?

我需要啥代码来修复 Apache HTTP 客户端删除?

apache http server修复CVE-2016-2183漏洞

apache http server修复CVE-2016-2183漏洞