Ich habe das überprüft und alle oben genannten Antworten sind teilweise richtig. Es hängt alles davon ab, wie der Container gestartet wurde. Es kommt darauf an, wie der Container gestartet wurde:
- wurde ein TTY zugewiesen (
-t
)
- wurde stdin offen gelassen (
-i
)
^P^Q
funktioniert, ABER nur wenn -t
und -i
verwendet wurden, um den Container zu starten:
[berto@g6]$ docker run -ti -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518
[berto@g6]$ docker attach test
# hier habe ich ^P^Q getippt
Lesesequenz wird eingelesen
# ich bin zurück an meiner Eingabeaufforderung
[berto@g6]$ docker kill test; docker rm -v test
test
test
ctrl+c
funktioniert, ABER nur wenn -t
(ohne -i
) verwendet wurde, um den Container zu starten:
[berto@g6]$ docker run -t -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
018a228c96d6bf2e73cccaefcf656b02753905b9a859f32e60bdf343bcbe834d
[berto@g6]$ docker attach test
^C
[berto@g6]$
Der dritte Weg zum Abtrennen
Es gibt einen Weg, um sich abzutrennen, ohne den Container zu beenden; Sie benötigen dazu eine andere Shell. Zusammenfassend, wenn Sie dies in einer anderen Shell ausführen, wird der Container abgetrennt und läuft weiter pkill -9 -f 'docker.*attach'
: (NB! das -9 für sigkill ist entscheidend, um den "attach" Prozess davon abzuhalten, das Signal an den laufenden Container weiterzugeben.)
[berto@g6]$ docker run -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518
[berto@g6]$ docker attach test
# hier habe ich ^P^Q getippt und es funktioniert nicht
^P
# ctrl+c funktioniert auch nicht
^C
# kann auch nicht in den Hintergrund versetzen
^Z
# gehen Sie zu einer anderen Shell und führen Sie den `pkill` Befehl aus
# ich bin zurück an meiner Eingabeaufforderung
[berto@g6]$
Warum? Weil Sie den Prozess beenden, der Sie mit dem Container verbunden hat, nicht den Container selbst.