Docker/httpd: Ошибка конфигурации: нет загрузки MPM
У меня есть докер-контейнер, основанный на официальном образе httpd. Из ниоткуда (после новой сборки) он начал сбой с ошибкой:
AH00534: httpd: Configuration error: No MPM loaded.
Ничего больше.
Я использую официальный образ httpd (FROM httpd:2.4
), и до сих пор все работало нормально.
Ошибка появилась только после удаления всех изображений в моей системе с помощью docker system prune -af
Ответы
Ответ 1
(редактируйте, спасибо delboy1978uk) Эту ошибку можно избежать, если применить простую рекомендацию: прикрепите изображения докера к определенной версии, а не к latest
.
После поиска коммитов официального образа httpd я нашел решение. (возможно, этот вопрос/ответ может помочь другим)
Для тех, кто сталкивается с этой заметкой во время поиска решения, просто добавьте LoadModule mpm_event_module modules/mod_mpm_event.so
в httpd.conf
над другими директивами LoadModule.
(из комментариев к коммиту № 17166574)
Итак, поскольку я переопределял файл /usr/local/apache2/conf/httpd.conf
без явного объявления модуля MPM, после этой фиксации мой образ начал давать сбой.
С этим быстрым исправлением все в порядке.
Для полного исправления добавьте это в ваш файл httpd.conf
(спасибо svinther):
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
или, для более перспективного решения, вы можете изменить исходный файл http.conf, используя sed.
Ответ 2
После сравнения моей конфигурации с последней конфигурацией httpd: 2.4 я обнаружил, что эти новые строки необходимо объединить в conf/httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
Примечание для себя: при создании производного изображения докеры httpd, вероятно, было бы лучше модифицировать файлы conf с помощью sed, а не просто копировать в статическом файле
Ответ 3
Как бы ни работало принятое решение, оно не идеально. Настоящая причина, по которой вы получаете эту ошибку, - это, скорее всего, тот факт, что ваш Dockerfile начинается со следующей строки:
FROM httpd:latest
Эта latest
часть, вы спрашиваете о последней и лучшей версии Apache.
Не делай этого. Это ваша инфраструктура. Зафиксируйте его до номера версии.
Что-то вроде
FROM apache:2.4.0
Это настоящий ответ. Невыполнение этого требования может привести к сбою вашей собственной базы кода, когда сторонние поставщики программного обеспечения обновят свой код.
Получите последнюю версию httpd.conf
, запишите номер версии, затем внесите в него изменения и получите :latest
черты из вашего Dockerfile.