Httpd公式画像に基づいたdockerコンテナーがあります。どこからでも(新しいビルドの後)、エラーで失敗し始めました:
AH00534: httpd: Configuration error: No MPM loaded.
他に何もありません。
公式のhttpdイメージ(FROM httpd:2.4
)を使用していますが、これまではすべて正常に機能していました。
このエラーは、docker system Prune -af
を使用してシステム内のすべてのイメージを削除した後にのみ表示されました
(編集、ありがとう delboy1978uk )単純なベストプラクティスを適用すれば、エラーを回避できます:latest
の代わりに特定のバージョンにドッカーイメージを固定します。
公式のhttpdイメージのコミットを掘り下げた後、解決策を見つけました。 (この質問/回答は他の人に役立つかもしれません)
ソリューションを探しているときにこのメモに出くわした場合は、他のLoadModuleディレクティブの上にある
LoadModule mpm_event_module modules/mod_mpm_event.so
にhttpd.conf
を追加してください。
そのため、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ファイルを変更できます。
構成を最新の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ドッカーイメージを構築する場合、静的ファイルを単にコピーするよりも、sedでconfファイルを変更する方がおそらく良いでしょう
受け入れられているソリューションが機能するのと同様に、理想的とは言えません。このエラーが発生する本当の理由は、Dockerfileが次の行で始まることです。
FROM httpd:latest
そのlatest
部分は、Apacheの最新かつ最高のバージョンを求めているということです。
しないでください。これがインフラストラクチャです。バージョン番号にロックダウンします。
何かのようなもの
FROM Apache:2.4.0
これが本当の答えです。そうしないと、サードパーティのソフトウェアベンダーがコードを更新するときに、コードベースが失敗する危険があります。
httpd.conf
の最新バージョンを取得し、バージョン番号をメモしてから、変更を加えて微調整し、:latest
をDockerfileから取り出します。