Ich kann an einen Docker-Prozess anhängen, aber Ctrl+ cfunktioniert nicht, um sich von ihm zu trennen. exit
stoppt im Grunde den Prozess.
Was ist der empfohlene Workflow, um den Prozess auszuführen, gelegentlich eine Verbindung herzustellen, um einige Änderungen vorzunehmen, und dann die Verbindung zu trennen?
xterm
,konsole
etc. Arbeit? Es funktioniert bei mir (ich werde losgelöst).Antworten:
Verwenden Sie die Escape-Sequenz Ctrl+ Pgefolgt von Ctrl+, um das tty zu trennen, ohne die Shell zu verlassen Q. Weitere Details hier .
Zusätzliche Informationen aus dieser Quelle :
^P^Q
mit Docker Attach getrennt und wieder angebracht werden^P^Q
; wird stdin stören^P^Q
; kann SIGKILL Client; kann mit Docker wieder anbringenquelle
"detachKeys": "ctrl-a,a"
Trennungsschlüssel festlegen, z. B. in Ihrer .docker / config.json-Datei oder--detach-keys "ctrl-a,a"
in der Befehlszeile mit Anhängen usw.Ctrl + Z
löst sich nicht ab; es ist nur ein Hintergrund für den Prozess. Es ist nicht dasselbe wie das Abnehmen und bringt eine Leistungsstrafe mit sich.Schauen Sie sich auch die
--sig-proxy
Option an :Verwenden Sie dann CTRL+ czum Abnehmen
quelle
docker run -ti --sig-proxy=false busybox top
scheint nicht zu funktionieren, der Prozess wird mit Strg-C beendet, aber beginnend mitdocker run -t -sig-proxy=false busybox top
schien zu funktionieren und das Beenden mit Strg-C zu ermöglichenCtrl-c
stoppt auch den Container.Wenn Sie nur Änderungen an Dateien vornehmen oder Prozesse überprüfen möchten, finden Sie hier eine weitere Lösung, die Sie wahrscheinlich wünschen.
Sie können den folgenden Befehl ausführen, um einen neuen Prozess aus dem vorhandenen Container auszuführen:
sudo docker exec -ti [CONTAINER-ID] bash
Startet einen neuen Prozess mit der Bash-Shell, und Sie können mit Ctrl+ Cdirekt davon entkommen. Dies hat keine Auswirkungen auf den ursprünglichen Prozess.
quelle
exec
ist es nicht.Ich denke, das sollte von der Situation abhängen. Nehmen Sie den folgenden Container als Beispiel:
(1)
docker attach
Befestigen Sie den Behälter mit " ":Da "
docker attach
" kein neues tty zuweist, sondern das ursprünglich ausgeführte tty wiederverwendetexit
, wird beim Ausführen des Befehls der laufende Container beendet:Wenn Sie also nicht wirklich den laufenden Container beenden möchten, sollten Sie Ctrl+ p+ Ctrl+ verwenden q.
(2) Verwenden Sie "
docker exec
"Da „
docker exec
“ wird eine neue tty zuteilen, so denke ich , sollten Sieexit
anstelle von Ctrl+ p+ Ctrl+ q.Folgendes führt Ctrl+ p+ Ctrl+ aus q, um den Container zu beenden:
Dann
bash
melden Sie den Container erneut an. Sie werden sehen, dass der Prozess im vorherigendocker exec
Befehl noch aktiv ist (PID ist 15):quelle
Um sich von einem laufenden Container zu lösen, verwenden Sie ^P^Q(gedrückt halten Ctrl, drücken P, drücken Q, loslassen Ctrl).
Es gibt einen Haken: Dies funktioniert nur, wenn der Container mit beiden
-t
und gestartet wurde-i
.Wenn Sie einen laufenden Container haben, der ohne eine (oder beide) dieser Optionen gestartet wurde und mit dem
docker attach
Sie eine Verbindung herstellen, müssen Sie einen anderen Weg zum Trennen finden. Abhängig von den von Ihnen ausgewählten Optionen und dem laufenden Programm ^Cfunktioniert dies möglicherweise oder es wird der gesamte Container zerstört. Du musst experimentieren.Ein weiterer Haken: Abhängig von den von Ihnen verwendeten Programmen können Ihr Terminal, Ihre Shell, Ihr SSH-Client oder Ihr Multiplexer entweder ^Poder ^Q(normalerweise letzteres) abfangen . Um zu testen, ob dies das Problem ist, versuchen Sie, das
--detach-keys z
Argument auszuführen oder anzuhängen . Sie sollten sich jetzt durch Drücken zohne Modifikatoren trennen können. Wenn dies funktioniert, stört ein anderes Programm. Der einfachste Weg, dies zu umgehen, besteht darin, mithilfe des--detach-keys
Arguments eine eigene Trennsequenz festzulegen. (Zum Beenden beispielsweise ^Kverwenden--detach-keys 'ctrl-k'
.) Alternativ können Sie versuchen, das Abfangen der Schlüssel in Ihrem Terminal oder einem anderen störenden Programm zu deaktivieren. Zum Beispielstty start ''
oderstty start undef
kann verhindern , dass das Terminal abfängt^Q auf einigen POSIX-Systemen, obwohl ich dies nicht als hilfreich empfunden habe.quelle
Wenn nichts anderes funktioniert, öffnen Sie ein neues Terminal und:
quelle
-9
war nicht notwendig.docker attach
und nicht die übergeordnete.Zum Abnehmen vom Behälter Sie einfach halten Ctrlund drücken Sie P+ Q.
So hängen Sie an einen laufenden Container an:
quelle
Ich hatte das gleiche Problem ctrl- Pund Qwürde auch nicht funktionieren ctrl- C... schließlich öffnete ich eine weitere Terminalsitzung und machte "Docker Stop ContainerID " und "Docker Start ContainerID " und es wurde die Arbeit erledigt. Seltsam.
quelle
--rm
flag gestartet haben .Ctrl+P
undCtrl+Q
funktioniert, wenn Sie den Container mit-it
flag gestartet haben .In der gleichen Shell halten ctrlTaste und drücken Sie die Tasten pdannq
quelle
-it
flag gestartet haben .Ich bin auf einem Mac und aus irgendeinem Grund würde Ctrl- p Ctrl- qnur funktionieren, wenn ich auch halten würdeShift
quelle
docker ps
docker kill ${containerId}
quelle
Um einen Docker-Prozess zu stoppen und die Ports freizugeben, verwenden Sie zuerst ctrl- cum den Container zu verlassen, und verwenden Sie dann Docker ps, um die Liste der ausgeführten Container zu finden. Anschließend können Sie den Docker-Container-Stop verwenden, um diesen Prozess zu stoppen und seine Ports freizugeben. Den Containernamen finden Sie im Docker-Befehl ps, der den Namen in der Namensspalte angibt. Hoffe das löst deine Fragen ....
quelle
Wenn Sie nur den Docker-Prozess benötigen, um in den Hintergrund zu treten, können Sie ihn verwenden
Ctrl + Z
Seien Sie sich bewusst, dass es sich nicht um eine echte Ablösung handelt und dass dies mit einer Leistungsstrafe verbunden ist. (Sie können es mit dem in den Vordergrund zurücksetzen
bg
Befehl ).Eine andere Möglichkeit besteht darin, Ihr Terminal zu schließen, wenn Sie es nicht mehr benötigen.
quelle
Für alle, die auf das gleiche Problem gestoßen sind, das ich hatte (kann nicht abgetrennt werden, ohne den Container zu töten, selbst wenn der Ablöseschlüssel gesetzt wurde) ......
Beim Starten Ihrer Container mit
docker-compose up -d
anstatt
docker attach {container name}
das Tailing-Protokoll anzuzeigen ....versuchen
docker-compose logs -f {service name}
ctrl- ctötet den Holzschwanz, ohne Ihren Container zu töten{service name}
Dies ist der Dienst, der in der Datei docker-compose.yml aufgeführt ist. (z . B. während Containername = elk_logstash_1 -> Dienstname = logstashHTH
quelle
Aktualisieren
Normalerweise habe ich Docker Attach verwendet, um zu sehen, was STDOUT anzeigt, um Container zu beheben. Ich habe gerade gefunden
docker logs --follow 621a4334f97b
, wodurch ich das STDOUT sehen und gleichzeitig Strg + C davon entfernen kann, ohne den Containerbetrieb zu beeinträchtigen! Genau das, was ich immer wollte.... natürlich müssen Sie Ihre eigene Container-ID ersetzen.
Ursprüngliche Antwort
Ich wollte den Container laufen lassen, hatte ihn aber angebracht, ohne den Container damit zu starten
-it
. Meine Lösung bestand darin, stattdessen meine SSH-Verbindung zu opfern (da ich in den Computer eingebunden war, auf dem die Container ausgeführt wurden). Das Beenden dieser SSH-Sitzung ließ den Container intakt, löste mich aber von ihm.quelle