我有一个基于httpd官方图片的docker容器。 从不知道(在新构建之后),它开始失败并出现错误:
AH00534: httpd: Configuration error: No MPM loaded.
别无其他。
我正在使用官方的httpd图片(FROM httpd:2.4
),到目前为止一切正常。
只有在使用docker system prune -af
答案 0 :(得分:59)
(编辑,谢谢delboy1978uk)
如果应用简单的最佳实践,则可以避免错误:将docker镜像固定到特定版本而不是latest
。
在挖掘官方httpd图像的提交后,我找到了解决方案。 (也许这个问题/答案可能对其他人有帮助)
对于那些在寻找解决方案时偶然发现此笔记的人, 只需添加
LoadModule mpm_event_module modules/mod_mpm_event.so
即可httpd.conf
高于其他LoadModule指令。
(from the comments on the commit #17166574)
因此,因为我在没有显式声明MPM模块的情况下覆盖了文件/usr/local/apache2/conf/httpd.conf
,所以在提交之后,我的图像开始失败。
通过这个快速解决方案,现在一切都很好。
要进行完整更正,请将其添加到您的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
或者,对于更具前瞻性的解决方案,您可以使用sed修改原始的http.conf文件。
答案 1 :(得分:8)
将我的配置与最新的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 docker镜像时,用sed修改conf文件可能比在静态文件中只修改COPY更好
答案 2 :(得分:3)
尽管公认的解决方案有效,但它并不理想。出现此错误的真正原因很可能是Dockerfile以以下行开头的事实:
FROM httpd:latest
这latest
部分是您要求的Apache最新和最佳版本。
不要那样做。这是您的基础架构。将其锁定为版本号。
类似
FROM apache:2.4.0
这是真正的答案。否则,第三方软件供应商更新代码时,您自己的代码库可能会失败。
获取httpd.conf
的最新版本,并记下版本号,然后对所做的更改进行调整,然后从您的Dockerfile中获取:latest
的地狱。
答案 3 :(得分:3)
如果您将Docker用于Windows,则可能会遇到File conversion issue。确保检查您的httpd.conf
的编码,它应该为Unix LF - UTF8
。
答案 4 :(得分:0)
我正在docker文件中使用它
FROM php:7.2-apache
我解决了将此行添加到/etc/docker/daemon.json
的问题{
"storage-driver": "devicemapper"
}