web-dev-qa-db-ja.com

docker / httpd:構成エラー:MPMがロードされていません

Httpd公式画像に基づいたdockerコンテナーがあります。どこからでも(新しいビルドの後)、エラーで失敗し始めました:

AH00534: httpd: Configuration error: No MPM loaded.

他に何もありません。

公式のhttpdイメージ(FROM httpd:2.4)を使用していますが、これまではすべて正常に機能していました。
このエラーは、docker system Prune -afを使用してシステム内のすべてのイメージを削除した後にのみ表示されました

18
tcarreira

(編集、ありがとう delboy1978uk )単純なベストプラクティスを適用すれば、エラーを回避できます:latestの代わりに特定のバージョンにドッカーイメージを固定します。


公式のhttpdイメージのコミットを掘り下げた後、解決策を見つけました。 (この質問/回答は他の人に役立つかもしれません)

ソリューションを探しているときにこのメモに出くわした場合は、他のLoadModuleディレクティブの上にあるLoadModule mpm_event_module modules/mod_mpm_event.sohttpd.confを追加してください。

コミットに関するコメント#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ファイルを変更できます。

65
tcarreira

構成を最新の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ファイルを変更する方がおそらく良いでしょう

8
svinther

受け入れられているソリューションが機能するのと同様に、理想的とは言えません。このエラーが発生する本当の理由は、Dockerfileが次の行で始まることです。

FROM httpd:latest

そのlatest部分は、Apacheの最新かつ最高のバージョンを求めているということです。

しないでください。これがインフラストラクチャです。バージョン番号にロックダウンします。

何かのようなもの

FROM Apache:2.4.0

これが本当の答えです。そうしないと、サードパーティのソフトウェアベンダーがコードを更新するときに、コードベースが失敗する危険があります。

httpd.confの最新バージョンを取得し、バージョン番号をメモしてから、変更を加えて微調整し、:latestをDockerfileから取り出します。

3
delboy1978uk