docker/httpd: 配置错误:未加载MPM

35

我有一个基于httpd官方镜像的Docker容器。 突然之间(在重新构建之后),它开始报错:

AH00534: httpd: Configuration error: No MPM loaded.

仅此而已。

我正在使用官方的 httpd 镜像 (FROM httpd:2.4),一切都正常工作直到现在。
这个错误只在使用 docker system prune -af 命令清除系统中所有映像后出现。

5个回答

88

(编辑,感谢delboy1978uk) 可以避免错误的一个简单最佳实践:将docker映像固定到特定版本而不是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

或者,为了更具有未来性的解决方案,您可以使用sed修改原始http.conf文件。


1
Apache正在运行一个线程化的MPM,但是你的PHP模块没有编译成线程安全的。你需要重新编译PHP。 - FantomX1
一个根本问题可能是xfs “支持d_type: false” docker info - https://docs.docker.com/storage/storagedriver/overlayfs-driver/ - Cristian Florescu

9
在与最新的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修改配置文件,而不是仅复制静态文件。


Apache正在运行一个线程化的MPM,但你的PHP模块没有编译成线程安全的。你需要重新编译PHP。 - FantomX1

7
如果您使用的是Docker for Windows,可能会遇到文件转换问题。请确保检查您的httpd.conf的编码格式,它应该是Unix LF - UTF8

4
虽然目前的解决方案可行,但并不理想。你遇到这个错误的真正原因很可能是因为你的 Dockerfile 以以下行开头:
FROM httpd:latest

“latest”这个词代表您想要最新版本的Apache。

但是,请注意,这是您的基础设施。应该将其锁定到特定的版本号。

可以选择类似以下格式:

FROM apache:2.4.0

这是正确的答案。不这样做会导致第三方软件供应商更新其代码时,您自己的代码库失败。

获取最新版本的httpd.conf,并记录版本号,然后进行调整更改,并将:latest从Dockerfile中删除。


5
你违反了自己的规定,不要下载最新版本的httpd.conf文件,应该下载2.4.0版本的。 :) - Alexander Mills

0

我在我的 Docker 文件中使用这个

FROM php:7.2-apache

我通过在/etc/docker/daemon.json文件中添加这行代码来解决了这个问题。

{
    "storage-driver": "devicemapper"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接