web-dev-qa-db-fra.com

L'image Docker CentOS ne démarre pas automatiquement httpd

J'essaie d'exécuter une image Docker simple avec Apache et un programme PHP. Cela fonctionne très bien si je lance

docker run -t -i -p 80:80 my/httpd /bin/bash

puis démarrez manuellement Apache

service httpd start

mais je ne peux pas obtenir httpd pour démarrer automatiquement lors de l'exécution

docker run -d -p 80:80 my/httpd

Apache démarre alors le conteneur existe. J'ai essayé un tas de différents CMDs dans mon fichier docker

CMD /etc/init.d/httpd start
CMD ["service" "httpd" "start"]
CMD ["/bin/bash", "/etc/init.d/httpd start"]
ENTRYPOINT /etc/init.d/httpd CMD start
CMD ./start.sh

start.sh est

#!/bin/bash
/etc/init.d/httpd start

Cependant, chaque instance de docker existera après le démarrage d'Apache

Suis-je en train de manquer quelque chose de vraiment évident?

23
dwitz

Vous devez exécuter Apache (httpd) directement - vous ne devez pas utiliser le script init.d.

Deux options:

  1. vous devez exécuter Apache au premier plan: /usr/sbin/Apache2 -DFOREGROUND ... (ou/usr/sbin/httpd dans CentOS)
  2. vous devez démarrer tous les services (y compris Apache configuré en exécution automatique) en exécutant /sbin/init comme point d'entrée.

Voir cet article de Nice: http://www.kstaken.com/blog/2013/07/06/how-to-run-Apache-under-docker/

20
Jiri

Ajoutez cette ligne au bas de votre Dockerfile pour exécuter Apache au premier plan sur CentOS

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
13
Hemerson Varela