Schwierigkeiten mit dem Stoppen von Docker-Containern? Das Finden des richtigen Wegs, um einen Container zu stoppen, ist schwierig, wenn Sie viele verschiedene Container erstellen können. In diesem Artikel lernen Sie Docker-Befehle zum Stoppen eines Containers oder aller Container kennen.
Lesen Sie weiter, um mehr zu erfahren!
Voraussetzungen
Um diesem Tutorial zu folgen, stellen Sie sicher, dass Sie Folgendes haben:
- Windows 10 – Das Tutorial verwendet Windows, um Docker auszuführen, aber Sie können dieselben allgemeinen Schritte auch auf Linux oder macOS anwenden.
- Docker Desktop – Dieses Tutorial verwendet Version 3.5.2. Der Docker Engine ist verfügbar, wenn Sie Linux verwenden, da die GUI nicht verfügbar ist.
- A running Docker container or containers.
Beenden von Containern mit dem Docker stop Containers-Befehl
Lassen Sie uns mit dem ersten Befehl beginnen: dem docker stop
-Befehl für Container und wie er das Stoppen von Containern ermöglicht.
Zum Beispiel müssen Sie möglicherweise einen laufenden Container mit dem Namen mystifying_hofstadter
und einer ID von fb66ed502096
stoppen. Wie im folgenden Beispiel gezeigt, stoppen Sie den Container mit dem docker stop
-Befehl für Container.

Was ist, wenn Sie mehrere laufende Container haben und diese stoppen möchten? Der Befehl docker stop
unterstützt das Stoppen mehrerer Container-IDs, jeweils einzeln.
Zuerst listen Sie alle Container über den Befehl docker ps
auf und übergeben Sie die Container-IDs an den Befehl docker stop
, wie unten gezeigt.

Was ist, wenn Sie alle laufenden Container stoppen möchten, ohne die Container-IDs manuell abzurufen und an docker stop
zu übergeben? Der Befehl docker ps -q
wird das erreichen. Der Parameter -q
des Befehls docker ps
gibt nur die IDs der Container aus.

Die
$(docker ps -q)
-Konstruktion oben ist ein Unter-Ausdruck sowohl in Bash auf Linux als auch in PowerShell auf Windows. Ein Unter-Ausdruck weist die Shell an, einen Satz von Befehlen,docker ps -q
, zuerst zu verarbeiten und dann die Ergebnismenge an den ursprünglichen Befehldocker stop
zurückzugeben.
Der Befehl docker stop
containers verwendet das SIGTERM-Signal. Linux-Signale informieren einen Prozess über ein Ereignis, aber es liegt am Prozess zu entscheiden, wie auf ein gegebenes Signal reagiert wird.
Bei Verwendung des SIGTERM-Signals verwendet Docker das Signal, um einen Prozess gnädig zu stoppen, indem es standardmäßig 10
Sekunden wartet, bevor es das SIGKILL-Signal sendet, das den Prozess sofort beendet.
Stoppen eines Containers mit Prozesssignalen
Sie haben etwas über das Standardverhalten von Docker (Stoppsignal) gelernt, mit dem docker stop
-Befehl, wenn Sie einen Container stoppen. Aber Sie möchten möglicherweise nicht das Standardverhalten. Stattdessen können Sie Docker anweisen, alternative Stopp-Signale zu verwenden.
Mit der --stop-signal
-Option des docker run
-Befehls können Sie das Stoppsignal beim Starten des Containers festlegen. Diese Option legt das Signal fest, das an den laufenden Container gesendet wird, wenn Sie ihn stoppen möchten.
Im folgenden Beispiel nimmt der --stop-signal
-Schalter den Wert SIGQUIT
an, der Docker mitteilt, das SIGQUIT-Signal zu senden, wenn es Zeit ist, den Container zu stoppen. Das Beispiel verwendet auch die folgenden Parameter:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- “Bildname” – Welches Docker-Image soll für den Container bereitgestellt werden, in diesem Fall das
ubuntu
-Image.

SIGQUIT
as the signal when starting and then stopping a Docker container. Sie können das Stoppsignal auch über eine Dockerfile angeben, die Docker mitteilt, wie ein Container erstellt werden soll. Sie können im Dockerfile einen Eintrag hinzufügen, der das Stoppsignal mit
STOPSIGNAL SIGQUIT
angibt, zum Beispiel. Sie können dasSIGQUIT
mit jedem gewünschten Stoppsignal austauschen.
Containers sofort beenden mit docker kill
Es wird Zeiten geben, in denen Sie Container sofort beenden möchten, ohne ihnen eine Gnadenfrist zu gewähren. Der docker kill
-Befehl stoppt einen Container sofort.
Das folgende Beispiel übergibt den Container mit der ID 2aa318273db5
an docker kill
. Der Container wird sofort über das SIGKILL-Signal beendet. Dem Container wird kein gnädiger Ausgang gewährt. Als Ergebnis des Befehls wird der Container beendet, und die ID des Containers wird angezeigt.
Alle Container mit dem Befehl
docker kill $(docker ps -q)
beenden. Beachten Sie, dass(docker ps -q
) hier ein Unterdrückungsausdruck ist.
Einen Container stoppen und entfernen mit docker rm
Standardmäßig wird beim Erstellen eines Containers dieser Container genauso wie zuvor erstellt: Er ist idempotent. Das Entfernen eines Containers hat minimale Auswirkungen, und mit diesem Gedanken im Hinterkopf kann docker rm
einen Container erzwingend stoppen und entfernen. Docker sendet ein SIGKILL
-Signal an den Hauptprozess und entfernt den Container aus der Liste der verfügbaren Container auf Ihrer Docker-Installation.
Wenn der Container die geänderten internen Dateien behalten muss oder sein Zustand beibehalten werden muss, werden durch das Entfernen eines Containers diese Änderungen zerstört. Achten Sie auf mögliche Probleme!
In folgendem Beispiel haben Sie möglicherweise einen Container gestartet, dem der Name kind_galileo
zugewiesen wurde. Bevor ein Container entfernt werden kann, muss der Container gestoppt werden, wie unten gezeigt. Der Befehl docker ps -a
zeigt den Status Exited
für den Beispielcontainer an.

Jetzt, da der Container gestoppt ist, wird das Ausführen des Befehls docker rm
den Container vollständig entfernen.
Anstatt den Container zu stoppen, um ihn dann zu entfernen, wird die Kombination aus --force
und docker rm
den Container in einer einzigen Operation stoppen und entfernen. Der Container laughing_elion
steht nicht mehr zur Verfügung, um ausgeführt zu werden.
Wenn Sie den Befehl
--force
nicht angeben, erhalten Sie die FehlermeldungError response from daemon: You cannot remove a running container...

Stoppen von Docker-Containern mit Docker Compose
Docker-Befehle werden normalerweise auf einem einzelnen Container verwendet, aber Sie können einen Dienst mit mehreren Containern erstellen, die zusammenarbeiten. Das Docker Compose-Tool ermöglicht es Ihnen, einen Dienst zu konfigurieren, der aus mehreren Containern besteht, die zusammenarbeiten.
Da die Container innerhalb eines Dienstes darauf ausgelegt sind, zusammenzuarbeiten, ist es am besten, den gesamten Dienst selbst anzuhalten, anstatt einzelne Container.
Wenn Sie einen Dienst mit mehreren Containern ausführen, wird [docker-compose stop]
den Dienst anhalten, ohne die Container oder den Dienst zu entfernen. Folgen Sie unten, um einen Docker Compose-Dienst zu erstellen, den Dienst zu starten und ihn letztendlich ordnungsgemäß zu beenden.
1. Erstellen Sie ein Verzeichnis, um Ihre Konfigurationsdatei zu speichern. In diesem Beispiel wird das Verzeichnis C:\Articles\Ubuntu die Datei speichern.
2. Erstellen Sie anschließend die Datei docker-compose.yml mit folgender Konfiguration. Die unten stehende Docker Compose-Datei erstellt einen Dienst mit zwei Ubuntu-Containern, und wenn sie gestartet werden, beenden sich die Container nicht sofort.
3. In einer Terminalsession navigieren Sie zum Verzeichnis Ihrer benutzerdefinierten Docker-Konfigurationsdatei, das in diesem Beispiel C:\Artikel\Ubuntu ist. Führen Sie docker-compose up -d
aus, um den Dienst zu generieren und im Hintergrund gemäß der -d
-Option zu starten.

4. In derselben Terminalsession und im selben Verzeichnis geben Sie den Befehl docker-compose stop
ein, um den Dienst und die Container ordnungsgemäß zu beenden.

Der
docker-compose
-Befehl hat, ähnlich wie derdocker
-Befehl, auch die Parameterrm --force
undkill
. Diedocker-compose
-Parameter wirken auf den Dienst anstelle eines einzelnen Containers. Der Befehldocker-compose kill
akzeptiert auch die Option-s
, um das Stoppsignal anzugeben.
Zusammenfassung
Docker-Container sind ein leistungsstarkes Werkzeug zur Erstellung einzigartiger und segmentierter Umgebungen für Entwicklung und Produktion. In diesem Artikel haben Sie verschiedene Möglichkeiten gelernt, wie Docker einen oder mehrere Container, sogar alle, stoppt. Sie haben auch das Standard-Stoppsignal von Docker und dessen Änderung kennengelernt.
Mit diesem Wissen kennen Sie nun die Feinheiten des Stopps von Docker-Containern und wie Sie Fehler vermeiden können, wenn es Zeit ist, laufende Container zu stoppen. Wie planen Sie, Ihre Container ab sofort zu stoppen, nachdem Sie dieses neu gefundene Wissen haben?
Source:
https://adamtheautomator.com/docker-stop-containers/