Was ist in Docker 1.1.2 (aktuell) der richtige Weg, um sich von einem Container zu lösen, ohne ihn anzuhalten?
Also zum Beispiel, wenn ich es versuche:
docker run -i -t foo /bin/bash
oderdocker attach foo
(für bereits laufenden Container)
Beide bringen mich zu einem Terminal im Container. Wie verlasse ich das Terminal des Containers, ohne es anzuhalten?
exit
und CTR+C
beide stoppen den Container.
Antworten:
Update: Wie unten in den Antworten Ctrl+ p, Ctrl+ erwähnt, qwird der interaktive Modus jetzt in den Daemon-Modus umgewandelt.
Nun, Ctrl+ C(oder Ctrl+ \) sollte Sie vom Container trennen, aber es wird den Container töten, weil Ihr Hauptprozess eine Bash ist.
Eine kleine Lektion über Docker. Der Container ist kein echtes voll funktionsfähiges Betriebssystem. Wenn Sie einen Container ausführen, nimmt der von Ihnen gestartete Prozess die PID 1 und übernimmt die Init-Leistung. Wenn dieser Prozess beendet wird, stoppt der Daemon den Container, bis ein neuer Prozess gestartet wird (über Docker-Start) (Weitere Erläuterungen zu diesem Thema http://phusion.github.io/baseimage-docker/#intro ).
Wenn Sie einen Container möchten, der die ganze Zeit im getrennten Modus ausgeführt wird, empfehle ich die Verwendung
Mit einem SSH-Server auf dem Container. (Am einfachsten folgen Sie dem Dockerizing-OpenSh-Tutorial https://docs.docker.com/engine/examples/running_ssh_service/ )
Oder Sie können Ihren Container einfach über neu starten
(wird standardmäßig getrennt)
quelle
-ti -d
, hängen Sie dann andocker attach
, trennen Sie dann mit zuerst Strg + P und dann Strg + Q. Ich dachte, ich könnte nur eine der Tastaturkürzel verwenden.Geben Sie Ctrl+ pdann Ctrl+ ein q. Es wird Ihnen helfen, den interaktiven Modus in den Dämonmodus zu versetzen.
Siehe https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
quelle
Ich habe mich damit befasst und alle obigen Antworten sind teilweise richtig. Es hängt alles davon ab, wie der Container gestartet wird. Beim Start des Containers kommt es auf Folgendes an:
-t
)-i
)^P^Q
funktioniert, ABER nur wenn-t
und-i
zum Starten des Containers verwendet wird:ctrl+c
funktioniert, ABER nur, wenn-t
( ohne-i
) zum Starten des Containers verwendet wird:Der dritte Weg, sich zu lösen
Es gibt jedoch eine Möglichkeit, sich zu lösen, ohne den Container zu töten. Du brauchst eine andere Hülle. Zusammenfassend lässt sich sagen, dass das Ausführen in einer anderen Shell getrennt wurde und der Container ausgeführt wurde
pkill -9 -f 'docker.*attach'
:Warum? Weil Sie den Prozess beenden, der Sie mit dem Container verbunden hat, nicht den Container selbst.
quelle
kill -9
Signal nicht. Der Prozess wird beendet und kann nicht in Anspruch genommen werden. Ich vermute, dass andere Signale dem Container die Möglichkeit geben, herunterzufahren, während-9
dies nicht der Fall ist.Wenn Sie "Docker anhängen" Container-ID ", gelangen Sie in den Container. Um den Container zu verlassen, ohne den Container anzuhalten, müssen Sie Ctrl+ P+ eingebenQ
quelle
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Ich halte Ashwins Antwort für die richtigste, meine alte Antwort ist unten.
Ich möchte hier eine weitere Option hinzufügen, die darin besteht, den Container wie folgt auszuführen
Sie können dann den Container betreten und Bash mit ausführen
Keine Notwendigkeit, sshd zu installieren :)
quelle
docker attach
dass es mehr Standard wäre, wenn man es wieder mit dem ersten Bash-Lauf verbindet.docker exec
funktioniert auch hier, erstellt jedoch zusätzlich zum ersten einen neuen Bash-Prozess. Sicher, der Prozess wird im selben Kontext / derselben Umgebung / demselben Container wie der erste erstellt, es ist jedoch ein anderer (eine Analogie wäre, eine neue Terminal-Registerkarte in Ihrem bevorzugten Terminal-Emulator zu öffnen).Die Standardmethode zum Trennen von einem interaktiven Container ist Ctrl+ P Ctrl+ Q. Sie können sie jedoch überschreiben, wenn Sie einen neuen Container ausführen oder mit dem Flag --detach-keys an einen vorhandenen Container anhängen .
quelle
Wenn Sie eine Verbindung hergestellt haben
docker attach
, können Sie die Verbindung trennen, indem Sie den Docker-Verbindungsprozess beenden. Besser ist es, den Parameter sig-proxy zu verwenden, um zu vermeiden, dass Strg + C an Ihren Container übergeben wird:Dieselbe Option ist für den
docker run
Befehl verfügbar .quelle
php:7.3-apache
Wenn Sie nur die Ausgabe des Prozesses sehen möchten, der aus dem Container ausgeführt wird, können Sie eine einfache Aktion ausführen
docker container logs -f <container id>
.Das
-f
Flag macht es so, dass die Ausgabe des Containersfollowed
in Echtzeit aktualisiert wird. Sehr nützlich zum Debuggen oder Überwachen.quelle
Sie können die
--detach-keys
Option beim Ausführen verwendendocker attach
, um die Standardsequenz CTRL+ P, CTRL+ zu überschreiben Q(das funktioniert nicht immer).Wenn Sie beispielsweise laufen
docker attach --detach-keys="ctrl-a" test
und CTRL+ drücken, verlassen ASie den Container, ohne ihn zu beenden.Andere Beispiele:
docker attach --detach-keys="ctrl-a,x" test
- Drücken SieCTRL+A
und dannX
zum Beendendocker attach --detach-keys="a,b,c" test
- Drücken SieA
dannB
und dann,C
um das Menü zu verlassenAuszug aus der offiziellen Dokumentation:
Wenn Sie möchten, können Sie eine Überschreibung der Docker-Schlüsselsequenz zum Trennen konfigurieren. Dies ist nützlich, wenn die Docker-Standardsequenz mit der für andere Anwendungen verwendeten Schlüsselsequenz in Konflikt steht. Es gibt zwei Möglichkeiten, Ihre eigene Trennungsschlüsselsequenz zu definieren, als Überschreibung pro Container oder als Konfigurationseigenschaft für Ihre gesamte Konfiguration.
Verwenden Sie das
--detach-keys="<sequence>"
Flag mit dem Docker-Befehl attach, um die Sequenz für einen einzelnen Container zu überschreiben . Das Format von<sequence>
ist entweder ein Buchstabe[a-Z]
oderctrl-
kombiniert mit einem der folgenden Elemente:Diese
a
,ctrl-a
,X
, oderctrl-\\
Werte sind Beispiele für gültige Tastenfolgen. Informationen zum Konfigurieren einer anderen Standardschlüsselreihenfolge für alle Container finden Sie im Abschnitt Konfigurationsdatei .Hinweis: Dies funktioniert seit Docker Version 1.10+ (zum Zeitpunkt dieser Antwort ist die aktuelle Version 18.03).
quelle
Alter Beitrag, aber einfach beenden und dann erneut starten ... Das Problem ist, wenn Sie sich auf einem Windows-Computer befinden. Strg + oder Strg + P sind an den Druck gebunden. Beim Verlassen des Starts sollte der Container nichts verletzen
quelle