如何修复: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 修复?