W Docker 1.1.2 (najnowszym), jaki jest właściwy sposób na odłączenie od kontenera bez zatrzymywania go?
Na przykład, jeśli spróbuję:
docker run -i -t foo /bin/bash
lubdocker attach foo
(dla już uruchomionego kontenera)
oba prowadzą mnie do terminala w kontenerze, jak wyjść z terminala kontenera bez zatrzymywania go?
exit
i CTR+C
oba zatrzymują pojemnik.
Odpowiedzi:
Aktualizacja: Jak wspomniano w odpowiedziach poniżej Ctrl+ p, Ctrl+ qzmieni teraz tryb interaktywny w tryb demona.
Cóż Ctrl+ C(lub Ctrl+ \) powinien oderwać cię od kontenera, ale zabije kontener, ponieważ twoim głównym procesem jest bash.
Mała lekcja o dokerze. Kontener nie jest w pełni funkcjonalnym systemem operacyjnym. Po uruchomieniu kontenera uruchamiany jest proces, biorąc PID 1 i przyjmując moc inicjującą. Tak więc po zakończeniu tego procesu demon zatrzymuje kontener do momentu uruchomienia nowego procesu (poprzez uruchomienie dokera) (Więcej wyjaśnień na ten temat http://phusion.github.io/baseimage-docker/#intro )
Jeśli chcesz, aby kontener działał cały czas w trybie odłączonym, sugeruję skorzystanie z niego
Z serwerem ssh w kontenerze. (najłatwiej jest postępować zgodnie z samouczkiem dokowania otwierającym https://docs.docker.com/engine/examples/running_ssh_service/ )
Możesz też ponownie uruchomić swój kontener za pośrednictwem
(domyślnie zostanie odłączony)
źródło
-ti -d
, następnie dołącz zdocker attach
, następnie odłącz najpierw Ctrl + P, a następnie Ctrl + Q. Pomyślałem, że mogę użyć tylko jednego ze skrótów klawiaturowych.Wpisz Ctrl+, pa następnie Ctrl+ q. Pomoże Ci przełączyć tryb interaktywny w tryb demona.
Zobacz https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
źródło
Wkopałem się w to i wszystkie powyższe odpowiedzi są częściowo poprawne. Wszystko zależy od sposobu uruchomienia kontenera. Po uruchomieniu kontenera sprowadza się do następujących kwestii:
-t
)-i
)^P^Q
działa, ale tylko wtedy, gdy-t
i-i
jest używany do uruchamiania pojemnika:ctrl+c
działa, ALE tylko wtedy, gdy-t
( bez-i
) zostanie użyty do uruchomienia kontenera:Trzeci sposób na oderwanie się
Istnieje jednak sposób na odłączenie bez zabijania kontenera; potrzebujesz innej powłoki. Podsumowując, uruchomienie tego w innej powłoce zostało odłączone i pozostawiło kontener uruchomiony
pkill -9 -f 'docker.*attach'
:Dlaczego? Ponieważ zabijasz proces, który połączył cię z kontenerem, a nie sam kontener.
źródło
kill -9
Sygnał nie. Proces został zakończony i nie można się na niego odwołać. Domyślam się, że inne sygnały dają kontenerowi szansę na zamknięcie, podczas gdy-9
nie.Jeśli wykonasz „docker attach” kontener id, wejdziesz do kontenera. Aby wyjść z kontenera bez zatrzymywania kontenera, musisz wpisać Ctrl+ P+Q
źródło
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Uważam, że odpowiedź Ashwina jest najbardziej poprawna, moja stara odpowiedź jest poniżej.
Chciałbym tutaj dodać kolejną opcję, która polega na uruchomieniu kontenera w następujący sposób
Następnie możesz wejść do kontenera i uruchomić bash za pomocą
Nie musisz instalować sshd :)
źródło
docker attach
byłoby bardziej standardowe, poprzez ponowne podłączenie do pierwszego uruchomienia bash.docker exec
również tutaj działa, ale oprócz pierwszego tworzy nowy proces bash. Jasne, proces jest tworzony w tym samym kontekście / środowisku / kontenerze pierwszego, jednak jest inny (analogią byłoby otwarcie nowej karty terminala w ulubionym emulatorze terminali).Domyślnym sposobem odłączenia od kontenera interaktywnego jest Ctrl+ P Ctrl+ Q, ale można go zastąpić, uruchamiając nowy kontener lub podłączając do istniejącego kontenera za pomocą flagi --detach-keys .
źródło
Jeśli się połączyłeś
docker attach
, możesz się odłączyć, zabijając proces dołączania dokera. Lepszym sposobem jest użycie parametru sig-proxy, aby uniknąć przekazania Ctrl + C do kontenera:Ta sama opcja jest dostępna dla
docker run
polecenia.źródło
php:7.3-apache
Jeśli chcesz tylko zobaczyć wynik procesu uruchomionego z kontenera, możesz zrobić prosty
docker container logs -f <container id>
.-f
Flag czyni go tak, że wyjście z pojemnikafollowed
i aktualizowane w czasie rzeczywistym. Bardzo przydatne do debugowania lub monitorowania.źródło
Możesz użyć tej
--detach-keys
opcji po uruchomieniu,docker attach
aby zastąpić domyślną sekwencję CTRL+ P, CTRL+ Q(to nie zawsze działa).Na przykład, kiedy biegniesz
docker attach --detach-keys="ctrl-a" test
i naciśniesz CTRL+, Awyjdziesz z kontenera, nie zabijając go.Inne przykłady:
docker attach --detach-keys="ctrl-a,x" test
- naciśnij,CTRL+A
a następnie,X
aby wyjśćdocker attach --detach-keys="a,b,c" test
- naciśnijA
, a następnieB
,C
aby wyjśćWyciąg z oficjalnej dokumentacji:
Jeśli chcesz, możesz skonfigurować zastąpienie sekwencji klawiszy Docker dla odłączania. Jest to przydatne, jeśli domyślna sekwencja Dockera powoduje konflikt z sekwencją klawiszy używaną w innych aplikacjach. Istnieją dwa sposoby zdefiniowania własnej sekwencji odłączania klucza, jako zastąpienie dla kontenera lub jako właściwość konfiguracji dla całej konfiguracji.
Aby zastąpić sekwencję dla pojedynczego kontenera, użyj
--detach-keys="<sequence>"
flagi z komendą docker attach. Format<sequence>
to albo litera[a-Z]
, alboctrl-
kombinacja z dowolnym z poniższych:Te
a
,ctrl-a
,X
czyctrl-\\
wartości są przykłady ważnych sekwencji klawiszy. Aby skonfigurować inną domyślną sekwencję kluczy dla wszystkich kontenerów, zobacz sekcję Plik konfiguracji .Uwaga: Działa to od wersji dokera 1.10+ (w chwili tej odpowiedzi aktualna wersja to 18.03)
źródło
Stary post, ale po prostu wyjdź, a następnie uruchom go ponownie ... problem polega na tym, że jesteś na komputerze z systemem Windows Ctrl p lub Ctrl P są przywiązane do drukowania ... wyjście z kontenera nie powinno nic zaszkodzić
źródło