2016-10-18 9 views
3

Ich verwende einen Andock-Container von Apache. Ich muss ein Skript ausführen, nachdem der Container gestartet wurde. Wie kann ich das tun?Wie Skript ausgeführt wird, nachdem Container gerade ausgeführt wird

Zunächst einmal habe ich eine dockerfile:

FROM:ubunty:trusty 
... necessary installs 

ADD test.sh /my-folder/  

EXPOSE 80 
EXPOSE 443 

CMD ["/run.sh"] 

In run.sh ich als letzten Befehl bin Ausführung: exec apache2 -D FOREGROUND, und das funktioniert. Jetzt möchte ich ein zusätzliches Skript test.sh ausgeführt werden, nachdem der Container gestartet wird.

Im Detail, was ich will, ist, nachdem der Apache-Container gestartet ist (das funktioniert), ein zusätzliches Skript ausgeführt werden. Dieses Skript muss eine Verbindung zu Port 80 meines Servers herstellen (der Port wurde dem Befehl run zugeordnet).

CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS          NAMES 
61c66c17d5f1  my-apache   "/run.sh"   28 minutes ago  Up 28 minutes  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp suspicious_shockley 
+0

Können Sie Ihr Skript stattdessen in einem anderen Container ausführen? Was benötigt es, damit es im selben Container läuft? – larsks

Antwort

0

Wenn Sie das Skript manuell Verwendung ausführen:

docker exec 61c66c17d5f1 /myfolder/test.sh 

Wenn Sie Ihr Skript automatisch ausgeführt werden soll, nachdem Apache startet Ihre run.sh ändern:

exec apache2 & 
sleep 2 
/myfolder/test.sh 
wait 

Grüße

+0

Ich möchte es mit dem automatischen Weg. Aber das heißt nicht. es scheint, dass alles nach dem exec-Befehl nicht ausgeführt wird. – DenCowboy

+0

Versuchen Sie mit einem & ich aktualisierte die Antwort –

0

Eine andere Möglichkeit, dies zu implementieren - erstellen Sie separate Container für Ihre Anwendung. Es wird auch Ihr treuer Bild erben, aber nichts anderes. Es wird alle Ihre Sachen ausführen und mit Null Code beenden. In diesem Fall werden Sie Ihren Apache-Service nicht berühren. Sie sollten diesen Container wie folgt Ihrem Datenvolumen zuordnen:

app: 
    build: ./app/ 
    depends_on: 
     - apache 
    volumes: 
     - /path/to/app:/var/www/html 

Wie Sie sagten, möchten Sie Ihr Skript ausgeführt werden, nachdem Apache gestartet wird. Sie können einfach das Feld depends_on hinzufügen, um docker_compose anzuweisen, es nach dem Apache-Service zu starten. Dafür sollten Sie die Andock-Notation V2 verwenden.

Übrigens - in Ihrem Fall müssen Sie Apache-Dienst gestartet, um von Ihrem Skript zu verbinden. Sie sollten depends_on durch links ersetzen - es wird Apache-IP zur App-Container-Hosts-Datei hinzufügen, damit Sie es mit Apache-Hostnamen anpingen können.

Verwandte Themen