2016-10-13 3 views
1

Ich habe ein Docker-Image zum Ausführen von Apache erstellt. Ich habe es von einem Ubuntu-Basis-Image erstellt, so dass ich die Apache- und PHP-Versionen einstellen konnte, die ich wollte. Ich habe am Ende meiner Andockdatei eine CMD hinzugefügt, um Apache im Vordergrund auszuführen.Wie habe ich mein Docker-Image ausführen Apache als Service

FROM ubuntu:16.04 

RUN apt-get update && \ 
    apt-get install -y --allow-unauthenticated software-properties-common && \ 
    add-apt-repository ppa:ondrej/apache2 && \ 
    apt-get update && \ 

    .... 

WORKDIR/

CMD ["/usr/sbin/apachectl","-DFOREGROUND"] 

Ich versuche, den Behälter mit Docker-compose (zusammen mit einigen anderen Diensten) zu laufen. Der Container wird jedoch sofort beendet. Dasselbe passiert, wenn das Bild mit dem docker Befehl ausgeführt wird.

docker run my_image 
docker ps 

Interessanter wenn ich laufe es mit docker run -it my_image, dann die Behälter beginnt, und ich bin in einer Bash-Shell genommen. (Ich glaube, das Standard-CMD auf dem Ubuntu-Basis-Image, das ich verwende, ist Bash).

Fehle ich etwas? Wie schreibe ich meine Dockerfile, so dass Apache als ein Dienst auf dem Bild ausgeführt wird?

+0

Was 'Docker tut logs ' sagen? – johnharris85

+0

"Ich versuche, den Container von einer Dockerfile (zusammen mit einigen anderen Diensten) auszuführen" - Ist das nicht sinnvoll? Wie meinst Du das? – johnharris85

+1

"Interessanterweise, wenn ich es mit Docker laufen lasse -it my_image" - Weird, können Sie bitte die gesamte Dockerfile und wie Sie versuchen, es (die verschiedenen Möglichkeiten) bitte veröffentlichen? – johnharris85

Antwort

3

Wenn Sie beim Ausführen eines Bildes eine Bash-Shell erhalten, klingt es so, als ob Ihre CMD ["/usr/sbin/apachectl","-DFOREGROUND"] nicht wirksam wird.

Überprüfen Sie, ob Ihr docker build Befehl erfolgreich war und dass Sie das eingebaute Bild und nicht ein anderes Bild ausführen.

Hier ist ein Beispiel Dockerfile, den entsprechenden docker build Ausgang (speziell der CMD Schritt), und ein Beispiel davon ausgeführt wird:

$ cat Dockerfile 
FROM ubuntu:16.04 
RUN apt-get -y update && apt-get -y install apache2 && rm -rf /var/lib/apt/lists/* 

CMD apachectl -DFOREGROUND 
$ docker build -t myapache . 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM ubuntu:16.04 
---> 2fa927b5cdd3 
Step 2 : RUN apt-get -y update && apt-get -y install apache2 && rm -rf /var/lib/apt/lists/* 
---> Using cache 
---> f766fd84056d 
Step 3 : CMD apachectl -DFOREGROUND 
---> Running in 2814d231e50e 
---> 774b579e43ce 
Removing intermediate container 2814d231e50e 
Successfully built 774b579e43ce 
$ r run -d --name myapache -p 80:80 myapache 
4718994f1669306c64ac6846f4e0f87aa15a63a888ca7d5c8ba711f39379db57 
$ http://localhost:80/ 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <!-- 
    Modified from the Debian original for Ubuntu 
    Last updated: 2014-03-19 
    See: https://launchpad.net/bugs/1288690 
... 
+1

Das ist es - der Container, den ich gerade ausgeführt habe, stammt nicht von der Dockerfile, die ich dachte - die Überprüfung der Ausgabe des Builds war das, was ich brauchte, um das zu identifizieren. Danke @Programmerq! –

+0

CMD apachectl -DFOREGROUND war mein Problem. Jetzt funktioniert es, danke :-) – erknrio

Verwandte Themen