15 février 2018
Docker Apache impossible à relancer : httpd already running
Comment corriger cette erreur avec mes stacks Docker.
Contexte
Dans les stacks Docker que j’ai créées (ici et ici), j’ai fini par constater après quelques usages que je pouvais rencontrer un problème au redémarrage de la stack. Apache ne démarre pas avec le message suivant : httpd (pid: XX) already running.
Explication
J’utilise généralement docker-compose stop pour arrêter mes stacks entre deux projets. C’est différent de docker-compose down parce que cela ne détruit pas les containers, mais les arrête seulement. Dans un monde idéal, il n’y aurait aucun souci, et en plus c’est un peu plus rapide.
En revanche, si la stack s’arrête à cause d’un crash, les containers peuvent devenir totalement inutilisables. À cause de l’architecture interne d’Apache, un nouveau démarrage va trouver le fichier /var/run/apache2/apache2.pid et le système du container ne lancera pas Apache afin d’éviter (du moins c’est ce qu’il comprend) une seconde instance déjà active.
Solution
Il y a deux points ici :
- Utiliser
docker-compose downplutôt quedocker-compose stop. D’un point de vue Docker, c’est la bonne pratique, parce que chaque container sera recréé from scratch à chaque fois que vous en aurez besoin. Comme vous avez persisté ce qu’il faut dans des volumes, vous ne perdez rien. - Personnaliser votre image Apache pour supprimer ce fichier de lock quand le container est recréé.