2014-01-22 9 views
21

Ich versuche, ein einfaches Docker Bild mit Apache und einem PHP-Programm zu starten. Es funktioniert gut, wenn ich laufenDocker CentOS Bild startet nicht automatisch httpd

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

dann manuell starten Apache

service httpd start 

aber kippe ich get httpd automatisch zu starten, wenn

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

Apache laufen wird beim Start dann Container vorhanden ist. Ich habe eine Reihe von verschiedenen CMD s in meiner Docker Datei versucht

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 ist

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

jedoch jeder Zeit Docker Instanz wird nach Apache existieren beginnt

Fehle ich etwas wirklich offensichtlich?

Antwort

19

Sie müssen Apache (httpd) direkt ausführen - Sie sollten nicht init.d-Skript verwenden.

zwei Optionen:

  1. Sie haben Apache im Vordergrund laufen: /usr/sbin/apache2 -DFOREGROUND ... (oder/usr/sbin/httpd in CentOS)
  2. Sie alle Dienste starten haben (Apache unter anderem als Autostart konfiguriert) indem /sbin/init als Einstiegspunkt ausgeführt wird.

Sehen Sie diesen schönen Beitrag: http://www.kstaken.com/blog/2013/07/06/how-to-run-apache-under-docker/

+2

Dank Jiri zu laufen! Verwenden von 'ENTRYPOINT ["/usr/sbin/httpd "]' & 'CMD [" -D "," FOREGROUND "]' funktioniert ein Leckerbissen – dwitz

+0

Nur FYI, einige Leute auch ausführen:/sbin/some_deamon && tail -f/var/log/foo –

+1

@ ØyvindSkaar '&& tail -f ...' ist ein netter Hack, aber beachte bitte, dass der Container bei Log Rotation beendet wird, also würde ich es nicht für Log-Dateien wie/var/log/apache2 empfehlen /access.log – Jiri

10

Fügen Sie diese Zeile in der Unterseite Ihres Dockerfile Apache im Vordergrund auf CentOS

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