Ich habe eine Reihe von Tutorials gesehen, die scheinbar dasselbe tun, was ich versuche, aber aus irgendeinem Grund werden meine Docker-Container beendet. Im Grunde stelle ich einen Web-Server und ein paar Dämonen in einem Docker-Container auf. Ich mache die letzten Teile davon durch ein Bash-Skript namens run-all.sh
, dass ich durch CMD in meiner Dockerfile laufen. run-all.sh
sieht wie folgt aus:Wie behalte Docker Container nach dem Starten von Diensten?
service supervisor start
service nginx start
Und ich es in meiner Dockerfile beginnen wie folgt:
CMD ["sh", "/root/credentialize_and_run.sh"]
Ich kann sehen, dass die alle Dienste richtig starten, wenn ich die Dinge manuell ausführen (dh immer auf das Bild mit -i -t/bin/bash), und alles sieht so aus, als würde es korrekt ausgeführt, wenn ich das Bild ausführe, aber es wird beendet, sobald es meine Prozesse gestartet hat. Ich möchte, dass die Prozesse unbegrenzt laufen, und soweit ich weiß, muss der Container weiterlaufen, damit dies geschieht. Dennoch, wenn ich docker ps -a
laufen, ich sehe:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
Was soll das? Warum ist es spannend? Ich weiß, ich könnte einfach eine While-Schleife am Ende meines Bash-Skripts einfügen, um weiterzumachen, aber was ist der richtige Weg, um zu verhindern, dass es beendet wird?
setzen Sie die Ports der Services nach außen frei (-p-Option für Docker Run)? (Natürlich wird dies nicht verhindern, dass sie aussteigen) – ribamar