Apache Error AH00094: Command line httpd -D FOREGROUND failed — Решение
Docker-контейнер с Apache моментально перезагружается в цикле (CrashLoopBackOff) или systemd сервис переходит в статус failed. В журнале контейнера docker logs или journalctl фиксируется завершение процесса: [mpm_prefork:notice] [pid 1] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND' failed или apache2 -DFOREGROUND failed with exit code 1.
| Контекст выполнения | Команда запуска | Первопричина аварии |
|---|---|---|
| Docker Container | httpd-foreground | Старый PID-файл (httpd.pid) остался после нештатной остановки контейнера |
| Systemd Unit | ExecStart=/usr/sbin/apachectl -DFOREGROUND | Фатальная ошибка конфигурации, прав доступа или исчерпание памяти OOM |
| Kubernetes Pod | /usr/sbin/httpd -D FOREGROUND | Провал Liveness probe из-за зависания воркеров |
- Контейнер останавливается сразу после запуска без подробных сообщений об ошибке в stdout.
- Команда
docker ps -aпоказываетExited (1)несколько секунд назад.
- Проверьте детальный лог падения внутри контейнера или системы:
# Для Docker контейнера: docker logs --tail 50 <container_name> # Для хостовой системы: sudo journalctl -xeu apache2.service --no-pager - Главная причина в Docker: Удалите зависший PID-файл, блокирующий старт нового мастер-процесса:
# Добавьте удаление PID в Dockerfile или скрипт entrypoint.sh: rm -f /var/run/apache2/apache2.pid /var/run/httpd/httpd.pid /tmp/httpd.pid - Запустите ручную проверку конфигурации внутри контейнера:
docker run --rm <image_name> apache2ctl -t # или для CentOS/Alpine образов: docker run --rm <image_name> httpd -t - Проверьте права на директорию
/var/run/apache2или/run/httpd, убедившись, что процесс с UID контейнера имеет права на запись lock-файлов и сокетов. - Если контейнер падает из-за нехватки памяти (OOM Killer), увеличьте лимиты RAM в
docker-compose.ymlили манифесте пода Kubernetes.
entrypoint.sh команду очистки сокетов и PID: rm -f /var/run/apache2/apache2.pid перед выполнением exec apache2 -DFOREGROUND.Частые вопросы (FAQ)
Что делает флаг -D FOREGROUND?
Флаг указывает Apache запускаться в основном процессе терминала (foreground) без форка в фоновый демон. Это необходимо для работы контейнеров Docker и сервисов под управлением systemd.
Почему AH00094 не содержит подробностей сбоя?
AH00094 — это общее информационное сообщение мастер-процесса о том, что процесс верхнего уровня завершился с ошибкой. Настоящая причина всегда зафиксирована в строках лога непосредственно перед этой записью.
Как запустить контейнер в режиме отладки для поиска ошибки?
Переопределите точку входа: docker run -it --rm --entrypoint /bin/sh <image_name> и запустите httpd -t или httpd -X вручную.
Что означает флаг httpd -X?
Флаг -X запускает Apache в режиме глубокого дебага: только один процесс, без форков, все логи выводятся напрямую в консоль.