Haben Sie Probleme mit Docker-Stopp-Containern? Es ist schwierig, den richtigen Weg zum Stoppen eines Containers zu finden, da viele verschiedene Container erstellt werden können. In diesem Artikel lernen Sie Docker-Befehle kennen, um einen Container oder alle Container zu stoppen.
Lesen Sie weiter, um mehr zu erfahren!
Voraussetzungen
Um diesem Tutorial zu folgen, stellen Sie sicher, dass Sie über Folgendes verfügen:
- Windows 10 – Das Tutorial verwendet Windows zum Ausführen von Docker, aber Sie können die gleichen allgemeinen Schritte auch auf Linux oder macOS anwenden.
- Docker-Desktop – Dieses Tutorial verwendet Version 3.5.2. Die Docker-Engine ist verfügbar, wenn Sie Linux verwenden, da die GUI nicht verfügbar ist.
- Ein laufender Docker-Container oder Container.
Beenden von Containern mit dem docker stop Containers-Befehl
Beginnen wir mit dem ersten Befehl:dem docker stop
Container-Befehl und wie er Container stoppt.
Beispielsweise müssen Sie vielleicht einen laufenden Container mit dem Namen mystifying_hofstadter
stoppen und eine ID von fb66ed502096
. Stoppen Sie den Container, wie im folgenden Beispiel gezeigt, mit docker stop
Container-Befehl.
# Stop the container via the name
docker stop mystifying_hofstadter
# Stop the container via the ID (same container)
docker stop fb66ed50209

Was ist, wenn Sie mehrere laufende Container haben und diese stoppen möchten? Der docker stop
Der Container-Befehl unterstützt das gleichzeitige Stoppen mehrerer Container-IDs.
Listen Sie zuerst alle Container über docker ps
auf Befehl und übergeben Sie die Container-IDs an docker stop
Container-Befehl, wie unten gezeigt.
# List all running containers
docker ps
# Stop the following Docker containers via the container ID
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e

Was ist, wenn Sie alle laufenden Container stoppen möchten, ohne die Container-IDs manuell abzurufen und diese an docker stop
zu übergeben ? Das docker ps -q
Befehl wird das bewerkstelligen. Das -q
Parameter von docker ps
Befehl gibt nur die IDs der Container aus.
# Create three containers. A semi-colon separates each command
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# List all running containers
docker ps -q
# Retrieve all running container IDs and pass those to docker stop
docker stop $(docker ps -q)

Der
$(docker ps -q)
Das obige Konstrukt ist ein Unterausdruck sowohl in Bash unter Linux als auch in PowerShell unter Windows. Ein Unterausdruck weist die Shell an, einen Befehlssatz zu verarbeiten,docker ps -q
, und geben Sie dann die Ergebnisse an den ursprünglichen Befehldocker stop
zurück .
Der docker stop
Der Befehl container verwendet das SIGTERM-Signal. Linux-Signale informieren einen Prozess über ein Ereignis, aber es liegt an dem Prozess, zu entscheiden, wie er auf ein bestimmtes Signal reagieren soll.
Bei Verwendung des SIGTERM-Signals verwendet Docker das Signal, um einen Prozess ordnungsgemäß zu stoppen, indem es auf einen standardmäßigen 10
wartet Sekunden vor dem Senden des SIGKILL-Signals, das den Vorgang sofort beendet.
Stoppen eines Containers mithilfe von Prozesssignalen
Sie haben das Standardverhalten von Docker (Stoppsignal) mit docker stop
kennengelernt Container-Befehl, wenn ein Container gestoppt wird. Möglicherweise möchten Sie jedoch nicht das Standardverhalten. Stattdessen können Sie Docker anweisen, alternative Stoppsignale zu verwenden.
Mit dem docker run
Befehle --stop-signal
Flag können Sie das Stoppsignal beim Starten des Containers angeben. Dieses Flag legt das Signal fest, das an den laufenden Container gesendet wird, wenn Sie ihn stoppen möchten.
Im Beispiel unten das --stop-signal
flag nimmt den Wert SIGQUIT
an , die Docker anweist, das SIGQUIT-Signal zu senden, wenn es an der Zeit ist, den Container zu stoppen. Das Beispiel verwendet auch die folgenden Parameter:
d
– Führt den Container im getrennten Modus (im Hintergrund) aus. Der getrennte Modus erlaubt keine sofortige Interaktion mit dem Container durch den Benutzer, da der Prozess im Hintergrund läuft.t
– weist eine Pseudo-TTY (PTY)-Konsole zu, die eine echte Terminalkonsole im Container emuliert und verhindert, dass der Ubuntu-Container sofort beendet wird. Der Ubuntu-Container im Beispiel benötigt eine PTY-Konsole, um im Hintergrund aktiv zu bleiben.- "Image-Name" – Aus welchem Docker-Image soll der Container bereitgestellt werden, in diesem Fall
ubuntu
Bild.
docker run -d -t --stop-signal SIGQUIT ubuntu

Sie können das Stoppsignal auch mithilfe einer Docker-Datei angeben, die Docker mitteilt, wie ein Container erstellt werden soll. Mit
STOPSIGNAL SIGQUIT
können Sie der Dockerfile einen Eintrag hinzufügen, der das Stoppsignal spezifiziert , zum Beispiel. Sie können dasSIGQUIT
umschalten mit jedem Stoppsignal, das Sie möchten.
Container sofort verlassen mit docker kill
Es wird Zeiten geben, in denen Sie Container verlassen möchten, ohne ihnen eine Nachfrist zu gewähren. Der docker kill
Befehl stoppt einen Container sofort.
Das folgende Beispiel übergibt den Container mit der ID 2aa318273db5
zu docker kill
. Der Container wird sofort über das SIGKILL-Signal verlassen. Der Container darf nicht ordnungsgemäß verlassen werden. Als Ergebnis des Befehls wird der Container beendet und die ID des Containers angezeigt.
docker kill 2aa318273db5
Docker killt alle Container mit dem Befehl
docker kill $(docker ps -q)
. Beachten Sie, dass(docker ps -q
) ist hier ein Unterausdruck.
Stoppen und Entfernen eines Containers mit docker rm
Wenn Sie einen Container erstellen, wird dieser Container standardmäßig genauso erstellt wie zuvor:Er ist idempotent. Das Entfernen eines Containers hat nur minimale Auswirkungen, und in diesem Sinne docker rm
kann einen Container erzwingen und entfernen. Docker gibt ein SIGKILL
aus Signal an den Hauptprozess und entfernt den Container aus der Liste der verfügbaren Container in Ihrer Docker-Installation.
Wenn der Container die geänderten internen Dateien behalten muss oder sein Status beibehalten werden muss, werden diese Änderungen durch das Entfernen eines Containers zerstört. Hüten Sie sich vor möglichen Fehlern!
Im folgenden Beispiel haben Sie vielleicht einen Container gestartet, dem der Name kind_galileo
zugewiesen wurde . Bevor ein Container entfernt wird, muss der Container gestoppt werden, wie unten gezeigt. Der docker ps -a
Befehl zeigt den Status Exited
an für den Beispielcontainer.

Jetzt, da der Container gestoppt ist, wird docker rm
ausgegeben Befehl wird den Container vollständig entfernen.
docker rm kind_galileo
Anstatt den Container zu stoppen, um den Container dann zu entfernen, kann die Kombination --force
und docker rm
stoppt und entfernt den Behälter in einem Arbeitsgang. Der Container laughing_elion
, kann nicht mehr ausgeführt werden.
docker rm --force laughing_elion
Wenn Sie
--force
nicht angeben Befehl erhalten Sie die FehlermeldungError response from daemon: You cannot remove a running container...

Stoppen von Docker-Containern mit Docker Compose
Docker-Befehle werden normalerweise für einen einzelnen Container verwendet, aber Sie können einen Dienst mit mehreren Containern erstellen, die zusammenarbeiten. Mit dem Docker Compose-Tool können Sie einen Dienst konfigurieren, der aus mehreren Containern besteht, um zusammenzuarbeiten.
Da die Container innerhalb eines Dienstes so konzipiert sind, dass sie zusammenarbeiten, ist es am besten, den gesamten Dienst selbst statt eines einzelnen Containers ordnungsgemäß zu stoppen.
Wenn Sie einen Dienst mit mehreren Containern ausführen, [docker-compose stop]
hält den Dienst an, ohne die Container oder den Dienst zu entfernen. Befolgen Sie die nachstehenden Anweisungen, um einen Docker Compose-Dienst zu erstellen, den Dienst zu starten und schließlich den Dienst ordnungsgemäß zu beenden.
1. Erstellen Sie ein Verzeichnis zum Speichern Ihrer Konfigurationsdatei. In diesem Beispiel das Verzeichnis C:\Artikel\Ubuntu speichert die Datei.
mkdir C:\Articles\Ubuntu
2. Als nächstes erstellen Sie die Datei docker-compose.yml Datei, die die folgende Konfiguration enthält. Die folgende Docker Compose-Datei erstellt einen Dienst mit zwei Ubuntu-Containern, und wenn sie aufgerufen werden, werden die Container nicht sofort beendet.
# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
# First Ubuntu Container
container1:
image: ubuntu
# Same as the -t option and allocates a Psuedo-TTY, so the container does not immediately exit.
tty: true
# Second Ubuntu Container
container2:
image: ubuntu
tty: true
3. Navigieren Sie in einer Terminalsitzung zum Verzeichnis Ihrer benutzerdefinierten Docker-Konfigurationsdatei, in diesem Beispiel C:\Articles\Ubuntu . Führen Sie docker-compose up -d
aus um den im vorherigen Schritt erstellten Dienst im Hintergrund zu generieren und zu starten, wie durch -d
angegeben Möglichkeit.

4. Geben Sie in derselben Terminalsitzung und demselben Verzeichnis den Befehl docker-compose stop
aus um den Dienst und die Container ordnungsgemäß zu beenden.

Das
docker-compose
Befehl, wiedocker
Befehl, hat auch denrm --force
undkill
Parameter. Diedocker-compose
Parameter funktionieren auf dem Dienst anstelle eines einzelnen Containers. Derdocker-compose kill
Befehl akzeptiert auch eine Option-s
Option zum Festlegen des Stoppsignals.
Schlussfolgerung
Docker-Container sind ein leistungsstarkes Tool zum Erstellen einzigartiger und segmentierter Umgebungen für Entwicklungs- und Produktionszwecke. In diesem Artikel haben Sie verschiedene Möglichkeiten kennengelernt, wie Docker einen oder mehrere, sogar alle Container stoppt. Sie haben auch etwas über das standardmäßige Stoppsignal gelernt, das Docker verwendet, und wie Sie es ändern können.
Mit diesem Wissen kennen Sie jetzt die Vor- und Nachteile des Stoppens von Docker-Containern und wissen, wie Sie es nicht vermasseln können, wenn es an der Zeit ist, die Ausführung von Containern zu stoppen. Wie wollen Sie Ihre Container von nun an stoppen, wenn Sie dieses neu gewonnene Wissen haben?