J'ai un conteneur docker basé sur l'image officielle httpd. De nulle part (après une nouvelle construction), il a commencé à échouer avec l'erreur suivante:
AH00534: httpd: Configuration error: No MPM loaded.
Rien d'autre.
J'utilise l'image officielle httpd (FROM httpd:2.4
) et tout fonctionnait bien jusqu'à présent.
L'erreur est apparue seulement après la taille de toutes les images de mon système avec un docker system Prune -af
(éditer, merci delboy1978uk ) L'erreur pourrait être évitée en appliquant une bonne pratique simple: épinglez vos images du menu fixe dans une version spécifique au lieu de latest
.
Après avoir creusé les commits de l'image officielle httpd, j'ai trouvé la solution. (Peut-être que cette question/réponse pourrait aider les autres)
Pour ceux qui trébuchent sur cette note tout en cherchant une solution, ajoutez simplement
LoadModule mpm_event_module modules/mod_mpm_event.so
Danshttpd.conf
Au-dessus des autres directives LoadModule.
( à partir des commentaires sur le commit # 17166574 )
Donc, parce que je remplaçais le fichier /usr/local/Apache2/conf/httpd.conf
Sans déclarer explicitement un module MPM, après cette validation, mon image a commencé à échouer.
Avec cette solution rapide, tout va bien maintenant.
Pour la correction complète, ajoutez ceci à votre fichier httpd.conf
(Merci (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
ou, pour une solution plus évolutive, vous pouvez modifier le fichier http.conf d'origine à l'aide de sed.
Après avoir comparé ma configuration avec la dernière configuration httpd: 2.4, j'ai constaté que ces nouvelles lignes devaient être fusionnées dans 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
Note à moi-même: lors de la création de l'image dérivée du docker httpd, il serait probablement préférable de modifier les fichiers de configuration avec sed, plutôt que de simplement COPY dans un fichier statique.
Même si la solution acceptée fonctionne, elle n’est pas idéale. La vraie raison pour laquelle vous obtenez cette erreur est très probablement le fait que votre fichier Dockerfile commence par la ligne suivante:
FROM httpd:latest
Cette partie latest
vous demande la dernière et la meilleure version d’Apache.
Ne fais pas ça. Ceci est votre infrastructure. Verrouillez-le à un numéro de version.
Quelque chose comme
FROM Apache:2.4.0
C'est la vraie réponse. Si vous ne le faites pas, votre propre base de code risque d’échouer lorsque des éditeurs de logiciels tiers mettent à jour leur code.
Obtenir la dernière version de httpd.conf
, et notez le numéro de version, puis corrigez-le avec vos modifications et obtenez-le :latest
l'enfer de votre Dockerfile.