Docker Apache с PHP - адрес недоступен: AH00056: подключиться к прослушивателю в [::]: 80 - PullRequest
0 голосов
/ 14 января 2019

У меня есть проект, построенный в Lumen (php Framework), размещенный на док-контейнере, построенном из alpine в качестве базового образа с использованием сервера apache2 с php 7.x

Вот часть моего 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-запросов (т.е. событий webhook из внешней системы) и их обработка.

Когда проект развернут, он работает в течение нескольких дней, прежде чем эта ошибка начнет появляться в наших журналах данных:

[core: warn] [pid 9] (99) Адрес недоступен: AH00056: подключение к прослушивателю включено [::]: 80

Когда возникает эта ошибка, сайт / проект не является общедоступным, но Apache все еще работает. Если я перезапущу контейнер, все вернется в нормальное состояние.

Проведя дальнейшее расследование, я заметил, что это происходит каждый раз, когда мой API срабатывает одновременно. То есть 3 дня назад проект получил одновременно 145 запросов, и с тех пор приложение больше не доступно.

Apache отказывается обслуживать любой новый запрос, но контейнер запущен и работает, и для него достаточно памяти / дискового пространства.

Есть идеи, что вызывает это? мне нужно оптимизировать mpm.conf для большего количества рабочих / дочерних процессов и т. д.? В настоящее время я использую стандартный конфиг.

1 Ответ

0 голосов
/ 18 июня 2019

Причина этой ошибки в том, что apache прослушивает порт 80 на IPv4 и IPv6. Это явно скажет apache прослушивать IPv4.

В настройках apache:

Listen 80

до

Listen 0.0.0.0:80

Убедитесь, что файл копируется в ваш док-контейнер и используется в apache.

Или добавьте дополнительный шаг в Dockerfile:

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

...