我有一个基于httpd官方镜像的Docker容器。 突然之间(在重新构建之后),它开始报错:
AH00534: httpd: Configuration error: No MPM loaded.
仅此而已。
我正在使用官方的 httpd 镜像 (FROM httpd:2.4
),一切都正常工作直到现在。
这个错误只在使用 docker system prune -af
命令清除系统中所有映像后出现。
(编辑,感谢delboy1978uk)
可以避免错误的一个简单最佳实践:将docker映像固定到特定版本而不是latest
。
在挖掘官方httpd镜像的提交后,我找到了解决方案。(也许这个问题/答案可能会帮助其他人)
对于那些在寻找解决方案时跌入此笔记的人, 只需将
LoadModule mpm_event_module modules/mod_mpm_event.so
添加到httpd.conf
上面的其他LoadModule指令中。
因为我重写了/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
或者,为了更具有未来性的解决方案,您可以使用sed修改原始http.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修改配置文件,而不是仅复制静态文件。
FROM httpd:latest
“latest”这个词代表您想要最新版本的Apache。
但是,请注意,这是您的基础设施。应该将其锁定到特定的版本号。
可以选择类似以下格式:
FROM apache:2.4.0
这是正确的答案。不这样做会导致第三方软件供应商更新其代码时,您自己的代码库失败。
获取最新版本的httpd.conf
,并记录版本号,然后进行调整更改,并将:latest
从Dockerfile中删除。
我在我的 Docker 文件中使用这个
FROM php:7.2-apache
我通过在/etc/docker/daemon.json文件中添加这行代码来解决了这个问题。
{
"storage-driver": "devicemapper"
}