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

So trennen Sie sich von einem Docker-Container, ohne ihn zu stoppen

Docker-Container verfügen über einen interaktiven Modus, mit dem Sie die Eingabe- und Ausgabestreams Ihres Terminals an den Prozess des Containers anhängen können. Durch Drücken von Strg-C wird dieser
Prozess normalerweise beendet, wodurch der Container angehalten wird. So können Sie sich von einer Sitzung trennen, ohne den Container zu stoppen.

Trennen ohne anzuhalten

Docker unterstützt eine Tastaturkombination, um sich elegant von einem Container zu trennen. Drücken Sie Strg-P, gefolgt von Strg-Q, um die Verbindung zu trennen.

Sie werden in Ihre Shell zurückversetzt, aber der zuvor angehängte Prozess bleibt am Leben und hält Ihren Container am Laufen. Sie können dies mit docker ps überprüfen um eine Liste der laufenden Container zu erhalten.

Drücken Sie Strg-C oder führen Sie exit aus Der Befehl beendet normalerweise den Vordergrundprozess des Containers, es sei denn, er wurde speziell konfiguriert. Ein Docker-Container muss einen laufenden Vordergrundprozess haben; ein Container ohne einen wird in den gestoppten Zustand wechseln.

Ändern der Tastatursequenz zum Trennen

Sie können die Trennungssequenz nach Ihren Wünschen ändern oder Konflikte mit Tastaturkürzeln vermeiden, die von Ihrer Anwendung berücksichtigt werden. Fügen Sie einen detachKeys hinzu -Eigenschaft zu Ihrer ~/.docker/config.json Datei, um die Schlüssel anzugeben, die Sie verwenden möchten.

Docker unterstützt den a-z Zeichen und @ , ^ , und _ , Symbole sowie das linke Klammerzeichen ([ ) und zwei Backslashes (\ ). Diese werden alle in Verbindung mit Ctrl- verwendet Schlüssel; Buchstaben können auch einzeln verwendet werden, ohne Ctrl .

Tastenfolgen werden als durch Kommas getrennte Liste ausgedrückt:

{
    "detachKeys": "Ctrl-d,d"
}

Dieses Beispiel würde sich vom Container lösen, wenn Sie Ctrl-D drücken unmittelbar gefolgt von d Schlüssel.

Ändern der Sequenz auf Containerbasis

Über das Ändern Ihrer globalen Konfiguration hinaus akzeptiert Docker detachKeys Überschreibungen pro Container und pro Anhang. Fügen Sie die --detach-keys hinzu Flag für Befehle, die an Containerprozesse angehängt werden können, um eine bestimmte Sequenz festzulegen.

Die Befehle, die dies unterstützen, sind:

  • docker run
  • docker start
  • docker exec
  • docker attach

Hier erfahren Sie, wie Sie an einen Container anhängen und dann Ctrl-d verwenden , gefolgt von einem Unterstrich, zum Trennen:

docker attach my-container --detach-keys="Ctrl-d,_"

Die --detach-keys flag verwendet dasselbe Tastensequenzformat wie detachKeys Konfigurationsoption. Das Flag überschreibt Ihre docker.json Einstellung; dies überschreibt wiederum die standardmäßige Strg-P/Strg-Q-Sequenz von Docker.

Trennen, wenn die Keyboard-Sequenz nicht funktioniert

Manchmal stoßen Sie möglicherweise auf einen Containerprozess, der sich weigert, sich zu trennen, selbst wenn Sie die Tastatursequenz eingeben. Dies kann passieren, wenn der Eingabestream des Containers nicht mit Ihrem Terminal verbunden ist (-i Flag) oder es ist kein Pseudo-TTY zugewiesen (-t Flagge). Sie könnten auch auf dieses Problem stoßen, wenn der Prozess Ihres Containers die Schlüsselsequenz zum Trennen verarbeitet und Sie sie beim Anhängen nicht überschrieben haben.

Unter diesen Umständen ist es immer noch möglich, Ihr Terminal vom Container zu trennen. Sie müssen vorübergehend ein anderes Shell-Fenster öffnen und es verwenden, um docker.attach zu beenden Prozess, der den Anhang aktiv hält.

Suchen Sie zuerst die Prozess-ID des Anhangsprozesses:

ps -ef | grep attach

Verwenden Sie die Ausgabe von ps um docker.attach zu identifizieren Prozess, den Sie töten müssen. Der Befehl in der CMD Spalte sollte den gesuchten Anhang identifizieren. Notieren Sie sich die entsprechende PID-Nummer und verwenden Sie den kill Befehl zum Beenden dieses Prozesses:

kill -9 <PID>

Sie sollten sehen, dass sich Ihre ursprüngliche Shell von Ihrem Docker-Container löst und in einen normalen Betriebszustand zurückkehrt. Sie können nun die zweite Shell schließen und die ursprüngliche weiterverwenden.

Diese Technik funktioniert, indem der Docker-CLI-Prozess beendet wird, der das Terminal an den Container angehängt hat, und nicht der Prozess innerhalb des Containers, der ihn am Laufen hält. Ihr ursprüngliches Terminal wird wieder nutzbar und der Container bleibt bestehen.

Wiederanhängen an Ihren Container

Sie können Container mit docker attach erneut anhängen Befehl. Dadurch werden die Eingabe-, Ausgabe- und Fehlerströme Ihres Terminals automatisch an den angegebenen Container angehängt:

docker attach my-container

Alle drei Streams sind standardmäßig verbunden. Sie können den Eingabestrom weglassen, indem Sie --no-stdin übergeben Flagge. Die Ausgabe des Containers wird in Ihr Terminal gestreamt, aber Sie können keine Eingabe liefern.

Verwenden Sie zum Trennen erneut die Tastenkombination oder Ctrl-C um den Prozess und Container zu stoppen. Wenn Sie Ctrl-C verwenden oder exit , docker attach setzt den $? Variable in Ihrer Shell richtig, damit Sie den Exit-Code des Containers überprüfen können.

Zusammenfassung

Der richtige Weg, sich von einem Docker-Container zu trennen, ist eine ziemlich obskure Tastatursequenz, die Sie zurück in Ihre Shell bringt. Sie können diese Sequenz anpassen, um die Merkfähigkeit zu erhöhen und Konflikte mit der Tastaturbedienung Ihres Containers zu vermeiden.

Tastaturtrennsequenzen können unter bestimmten Umständen wirkungslos sein. Es ist immer noch möglich, sich von Ihrem Container zu lösen, indem Sie den Prozess identifizieren und beenden, der den Anhang unterstützt. Normale Unix-Befehle wie ps und kill sollte in diesem Szenario verwendet werden.

Wenn Sie schließlich möchten, dass Ihr Container dauerhaft getrennt wird, starten Sie ihn mit -d Flag (docker run -d my-image:latest ). Dies schickt den Container direkt in den Hintergrund und gibt keine Ausgabe an Ihre Shell aus. Getrennte Container sind immer mit dem docker ps sichtbar Befehl und kann mit docker stop my-container gestoppt werden .


Docker
  1. So installieren Sie WordPress mit Docker

  2. So führen Sie MySQL in einem Docker-Container aus

  3. Wie man SSH in einen Docker-Container einfügt

  4. So weisen Sie einem Docker-Container eine statische IP zu

  5. So erstellen Sie ein Docker-Image aus einem Container und einer Docker-Datei

So führen Sie PHPMyAdmin in einem Docker-Container aus

So prüfen Sie den Inhalt eines Docker-Images, ohne einen Container zu starten

So führen Sie Grafana in einem Docker-Container aus

So erstellen Sie ein Docker-Image aus einem laufenden Container

So richten Sie einen Apache Docker-Container ein

So führen Sie Docker-Container aus