Mogę dołączyć do procesu dokowania, ale Ctrl+ cnie działa, aby się od niego odłączyć. exit
w zasadzie zatrzymuje proces.
Jaki jest zalecany przepływ pracy, aby proces działał, czasami dołączając się do niego, aby wprowadzić pewne zmiany, a następnie odłączając?
xterm
,konsole
itp pracę? To działa dla mnie (jestem odłączony).Odpowiedzi:
Aby odłączyć tty bez wychodzenia z powłoki, użyj sekwencji ucieczki Ctrl+, Pa następnie Ctrl+ Q. Więcej informacji tutaj .
Dodatkowe informacje z tego źródła :
^P^Q
i ponownie podłączyć za pomocą narzędzia docker attach^P^Q
; zakłóci standardowe wejście^P^Q
; czy klient SIGKILL; można ponownie podłączyć za pomocą narzędzia dokującegoźródło
"detachKeys": "ctrl-a,a"
W pliku .docker / config.json lub--detach-keys "ctrl-a,a"
w wierszu poleceń z załącznikiem itp.Ctrl + Z
nie odłącza się; to tylko tło procesu. To nie to samo, co odłączanie i pociąga za sobą karę wydajności.Zapoznaj się również z
--sig-proxy
opcji :Następnie użyj CTRL+, caby odłączyć
źródło
docker run -ti --sig-proxy=false busybox top
co wydaje się nie działać, proces jest zabijany za pomocą ctrl-c, ale zaczynając oddocker run -t -sig-proxy=false busybox top
wydaje się działać i umożliwia zamknięcie za pomocą ctrl-cCtrl-c
zatrzyma również pojemnik.Jeśli chcesz tylko zmodyfikować pliki lub sprawdzić procesy, oto inne rozwiązanie, które prawdopodobnie chcesz.
Możesz uruchomić następującą komendę, aby wykonać nowy proces z istniejącego kontenera:
sudo docker exec -ti [CONTAINER-ID] bash
rozpocznie nowy proces z powłoką bash, i możesz od niego uciec bezpośrednio Ctrl+ C, nie wpłynie to na oryginalny proces.
źródło
exec
nie jest nim.Myślę, że powinno to zależeć od sytuacji. Weź jako przykład następujący kontener:
(1) Użyj „
docker attach
”, aby przymocować pojemnik:Ponieważ „
docker attach
” nie przydzieli nowego tty, ale użyje ponownie oryginalnego działającego tty, więc jeśli uruchomiszexit
polecenie, spowoduje to wyjście z uruchomionego kontenera:Więc jeśli naprawdę nie chcesz, aby działający kontener był zamykany, powinieneś użyć Ctrl+ p+ Ctrl+ q.
(2) Użyj „
docker exec
”Ponieważ „
docker exec
” będzie przeznaczyć nowy tty, więc myślę, że należy użyćexit
zamiast Ctrl+ p+ Ctrl+ q.Wykonuje Ctrl+ p+ Ctrl+, qaby wyjść z kontenera:
Następnie zaloguj się ponownie, zobaczysz, że
bash
proces w poprzedniejdocker exec
komendzie jest nadal aktywny (PID to 15):źródło
Aby odłączyć od uruchomionego pojemnika, użyj ^P^Q(przytrzymaj Ctrl, naciśnij P, naciśnij Q, zwolnij Ctrl).
Jest pewien haczyk: działa to tylko wtedy, gdy kontener został uruchomiony z obu
-t
i-i
.Jeśli masz działający kontener, który został uruchomiony bez jednej (lub obu) tych opcji, i dołączasz się
docker attach
, musisz znaleźć inny sposób na odłączenie. W zależności od wybranych opcji i uruchomionego programu,^C może działać lub zabijać cały kontener. Będziesz musiał eksperymentować.Kolejny haczyk: w zależności od używanych programów, terminal, powłoka, klient SSH lub multiplekser mogą przechwytywać jeden ^Plub ^Qdrugi (zwykle ten drugi). Aby sprawdzić, czy to jest problem, spróbuj uruchomić lub dołączyć za pomocą
--detach-keys z
argumentu. Powinieneś być teraz w stanie odłączyć, naciskając z, bez żadnych modyfikatorów. Jeśli to zadziała, inny program zakłóca. Najłatwiejszym sposobem obejścia tego problemu jest ustawienie własnej sekwencji odłączania za pomocą argumentu. (Na przykład, aby wyjść , użyj .) Alternatywnie możesz spróbować wyłączyć przechwytywanie kluczy w twoim terminalu lub innym zakłócającym programie. Na przykład lub może uniemożliwić przechwycenie terminala w niektórych systemach POSIX, chociaż nie uważam tego za pomocne.--detach-keys
^K--detach-keys 'ctrl-k'
stty start ''
stty start undef
^Qźródło
gdy nic innego nie działa, otwórz nowy terminal, a następnie:
źródło
-9
nie było konieczne.docker attach
a nie jego rodzica.Aby odłączyć od pojemnika, wystarczy przytrzymać Ctrli nacisnąć P+ Q.
Aby dołączyć do działającego kontenera, użyj:
źródło
Miałem ten sam problem ctrl- Pi Qnie działało, ani ctrl- C... w końcu otworzyłem kolejną sesję terminalową i zrobiłem „docker stop containerid ” i „docker start containerid ” i to załatwiło sprawę. Dziwne.
źródło
--rm
flagą.Ctrl+P
iCtrl+Q
działa, jeśli kontener został uruchomiony z-it
flagą.W tej samej powłoki, przytrzymaj ctrlklawisz i naciśnij klawisze pnastępnieq
źródło
-it
flagą.Jestem na komputerze Mac i z jakiegoś powodu Ctrl- p Ctrl- qdziałałbym tylko wtedy, gdybym to zrobiłShift
źródło
docker ps
docker kill ${containerId}
źródło
aby zatrzymać proces dokera i zwolnić porty, najpierw użyj ctrl- caby wyjść z kontenera, a następnie użyj dokera ps, aby znaleźć listę uruchomionych kontenerów. Następnie możesz użyć przystanku kontenera dokującego, aby zatrzymać ten proces i zwolnić jego porty. Nazwę kontenera można znaleźć w poleceniu dokera ps, które podaje nazwę w kolumnie nazwy. Mam nadzieję, że to rozwiąże twoje pytania ....
źródło
Jeśli potrzebujesz tylko procesu dokowania, aby przejść w tle, możesz go użyć
Ctrl + Z
Należy pamiętać, że nie jest to prawdziwe oderwanie i wiąże się z karą wydajności. (Możesz przywrócić go na pierwszy plan za pomocą
bg
polecenia).Inną opcją jest zamknięcie terminalu, jeśli nie jest już potrzebny.
źródło
Dla każdego, kto napotkał ten sam problem, co ja (nie mogę odłączyć bez zabicia kontenera, nawet po ustawieniu klucza odłączania) ......
Podczas uruchamiania pojemników z
docker-compose up -d
zamiast używać
docker attach {container name}
do przeglądania dziennika tailing ....try
docker-compose logs -f {service name}
ctrl- czabija ogon z bali bez zabijania twojego kontenera{service name}
jest usługą wymienioną w boku pliku docker-compose.yml .. (np. while nazwa kontenera = elk_logstash_1 -> nazwa usługi = logstashHTH
źródło
Aktualizacja
Zazwyczaj korzystałem z narzędzia docker attach, aby zobaczyć, co wyświetla STDOUT, do rozwiązywania problemów z kontenerami. Właśnie znalazłem
docker logs --follow 621a4334f97b
, co pozwala mi zobaczyć STDOUT, a jednocześnie ctrl + c wyłączyć z niego bez wpływu na działanie kontenera! Dokładnie to, czego zawsze chciałem.... naturalnie będziesz musiał zastąpić swój własny identyfikator kontenera.
Oryginalna odpowiedź
Chciałem zostawić kontener uruchomiony, ale przyłączyłem go bez uruchamiania kontenera
-it
. Moim rozwiązaniem było poświęcenie zamiast tego mojego połączenia SSH (ponieważ byłem SSHed w maszynie, która uruchomiła kontenery). Zabicie tej sesji ssh pozostawiło pojemnik nietknięty, ale oderwało mnie od niego.źródło