Hintergrund
Ein Docker-Container führt einen Prozess aus (den "Befehl" oder "Einstiegspunkt"), der ihn am Leben erhält. Der Container wird so lange ausgeführt, wie der Befehl ausgeführt wird.
In Ihrem Fall wird der Befehl ( /bin/bash
standardmäßig aktiviert centos:latest
) sofort beendet (wie Bash, wenn er nicht mit einem Terminal verbunden ist und nichts auszuführen ist).
Wenn Sie einen Container im Daemon-Modus (mit -d
) ausführen , führt der Container normalerweise eine Art Daemon-Prozess aus (wie httpd
). In diesem Fall bleibt der Container am Leben, solange der httpd-Dämon ausgeführt wird.
Sie versuchen anscheinend, den Container am Leben zu erhalten, ohne dass ein Dämonprozess im Container ausgeführt wird. Dies ist etwas seltsam (weil der Container nichts Nützliches tut, bis Sie mit ihm interagieren, vielleicht mit docker exec
), aber es gibt bestimmte Fälle, in denen es sinnvoll sein könnte, so etwas zu tun.
(Wollten Sie zu einer Bash-Eingabeaufforderung im Container gelangen? Das ist einfach! docker run -it centos:latest
)
Lösung
Eine einfache Möglichkeit, einen Container im Dämonmodus unbegrenzt am Leben zu halten, besteht darin, ihn sleep infinity
als Befehl des Containers auszuführen . Dies setzt nicht voraus, dass seltsame Dinge wie das Zuweisen eines TTY im Daemon-Modus ausgeführt werden. Obwohl es darauf ankommt, seltsame Dinge zu tun, wie die Verwendung sleep
als primärer Befehl.
$ docker run -d centos:latest sleep infinity
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d651c7a9e0ad centos:latest "sleep infinity" 2 seconds ago Up 2 seconds nervous_visvesvaraya
Alternative Lösung
Wie von cjsimon angegeben, weist die -t
Option eine "Pseudo-tty" zu. Diese Tricks führen dazu, dass die Ausführung auf unbestimmte Zeit fortgesetzt wird, da angenommen wird, dass sie mit einem interaktiven TTY verbunden ist (obwohl Sie keine Möglichkeit haben, mit diesem bestimmten TTY zu interagieren, wenn Sie nicht bestehen -i
). Auf jeden Fall sollte dies auch den Trick tun:
$ docker run -t -d centos:latest
Nicht 100% sicher, ob -t
andere seltsame Interaktionen hervorgerufen werden; Vielleicht hinterlassen Sie unten einen Kommentar, wenn dies der Fall ist.