Docker Apache PHP - 地址不可用:AH00056:连接到 [::]:80 上的侦听器

Docker Apache with PHP - Address not available: AH00056: connect to listener on [::]:80

我有一个在 Lumen(php 框架)中构建的项目托管在一个 docker 容器上,该容器是从 alpine 作为基础镜像构建的,使用带有 php 7.x[的 apache2 服务器

这是我的 Dockerfile 的一部分:

FROM alpine:3.8
MAINTAINER Latheesan Kanesamoorthy

RUN apk add \
        --no-cache \
        --update \
        apache2 \
        composer \
        nano \
        bash \
        curl \
        php7 \
        php7-apache2 \
        php7-curl \
        php7-dom \
        php7-mbstring \
        php7-pdo_mysql \
        php7-session \
        php7-sockets \
        php7-tokenizer \
        php7-xml \
        php7-xmlwriter \
    && mkdir -p /run/apache2 \
    && ln -sf /dev/stdout /var/log/apache2/access.log \
    && ln -sf /dev/stderr /var/log/apache2/error.log

这个项目的目的是接收 http post 请求(即来自外部系统的 webhook 事件)并处理它们。

项目部署后,在我们的 datadog 日志中开始出现此错误之前,它可以正常运行几天:

[core:warn] [pid 9] (99)Address not available: AH00056: connect to listener on [::]:80

发生此错误时,site/project 不可公开访问,但 apache 仍然是 运行。如果我重新启动容器,一切都会恢复正常。

进一步调查后,我注意到每次我的 api 同时被击中时都会发生这种情况。 IE。 3 天前,项目同时遇到 145 个请求,此后应用程序无法再访问。

Apache 拒绝为任何新请求提供服务,但容器已启动并且 运行 并且有大量 memory/disk-space 可供容器使用。

知道是什么原因造成的吗?我是否需要优化 mpm.conf 以允许更多的工作人员/子进程等?我目前正在使用库存配置。

出现此错误的原因是因为apache 正在侦听IPv4 和IPv6 上的端口80。 这将明确告诉 apache 监听 IPv4。

在 apache 配置更改中:

Listen 80

Listen 0.0.0.0:80

确保文件被复制到您的 docker 容器中并在 apache 中使用。

或者在 Dockerfile 中添加一个额外的步骤:

&& sed -i 's/^Listen 80$/Listen 0.0.0.0:80/' /etc/apache2/httpd.conf