GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Verwenden Sie Docker-Stop-Container, ohne etwas zu vermasseln!

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 Befehl docker 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 das SIGQUIT 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 Fehlermeldung Error 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, wie docker Befehl, hat auch den rm --force und kill Parameter. Die docker-compose Parameter funktionieren auf dem Dienst anstelle eines einzelnen Containers. Der docker-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?


Docker
  1. Was ist Docker? Erfahren Sie, wie Sie Container verwenden – mit Beispielen erklärt

  2. Was ist Docker (und Linux-Container?)

  3. So verwenden Sie Docker Compose

  4. So verbinden Sie Docker-Container

  5. So verwenden Sie den Docker-Inspect-Befehl

So verwenden Sie Docker-Neustartrichtlinien, um Container am Laufen zu halten

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

Verwenden Sie Ngnix als Proxy für Docker-Container unter Ubuntu

Docker-Container auflisten / starten / stoppen / löschen