Docker Container mit Timeout starten
In diesem Schritt lernen wir, wie man einen Docker-Container mit einem Timeout startet. Der Befehl docker start
bietet das Flag --attach
, das es ermöglicht, sich an die STDOUT/STDERR-Ausgabe des Containers anzuhängen und Signale weiterzuleiten. In Kombination mit --attach
kann man auch das --timeout
-Flag verwenden, um einen Timeout für das Stoppen des Containers nach Client-Trennung festzulegen. Dies ist besonders nützlich, um sicherzustellen, dass ein Container nicht unbegrenzt weiterläuft, wenn der startende Client beendet wird.
Zuerst erstellen wir einen Container, den wir mit Timeout starten können. Wir verwenden das ubuntu
-Image und führen einen Befehl aus, der den Container aktiv hält.
docker create --name my-timeout-ubuntu ubuntu sleep 60
Dieser Befehl erstellt einen Container namens my-timeout-ubuntu
basierend auf dem ubuntu
-Image und setzt den Befehl auf sleep 60
. Beachten Sie, dass wir hier docker create
verwendet haben, was den Container erstellt, aber nicht startet.
Nun starten wir diesen Container mit docker start
und den Flags --attach
und --timeout
. Wir setzen den Timeout auf 5 Sekunden.
docker start --attach --timeout 5 my-timeout-ubuntu
Hier die Erklärung des Befehls:
docker start
: Startet einen gestoppten Container
--attach
: Hängt sich an die STDOUT/STDERR-Ausgabe des Containers an und leitet Signale weiter
--timeout 5
: Setzt einen Timeout von 5 Sekunden. Wenn der Client (in diesem Fall Ihr Terminal) die Verbindung trennt, wartet Docker 5 Sekunden auf ein ordnungsgemäßes Stoppen des Containers. Falls dieser nicht innerhalb von 5 Sekunden stoppt, sendet Docker ein SIGKILL-Signal zum erzwungenen Stoppen
my-timeout-ubuntu
: Der Name des zu startenden Containers
Bei Ausführung dieses Befehls werden Sie an die Ausgabe des Containers angehängt. Da der Container nur sleep 60
ausführt, sehen Sie zunächst keine Ausgabe.
Simulieren wir nun eine Client-Trennung durch Drücken von Strg+C
im Terminal. Dies trennt die Verbindung zum Container.
Nach Strg+C
beginnt der Timeout-Prozess. Docker wartet 5 Sekunden auf das Stoppen des my-timeout-ubuntu
-Containers. Da der Container sleep 60
ausführt, wird er nicht innerhalb von 5 Sekunden stoppen, sodass Docker ihn zwangsweise beendet.
Überprüfen Sie mit docker ps -a
, ob der Container gestoppt wurde:
docker ps -a
Der Container my-timeout-ubuntu
sollte mit Status Exited
aufgeführt sein, was bestätigt, dass der Timeout-Mechanismus funktioniert hat.
Die Verwendung des --timeout
-Flags mit docker start --attach
ist eine bewährte Methode zur Lebenszyklusverwaltung von Containern, die mit Client-Verbindung gestartet werden, um sicherzustellen, dass sie auch bei unerwarteter Client-Beendigung ordnungsgemäß bereinigt werden.