Kontejnery Docker mají interaktivní režim, který vám umožní připojit vstupní a výstupní proudy vašeho terminálu k procesu kontejneru. Stisknutím Ctrl-C se tento
proces obvykle ukončí a kontejner se zastaví. Zde je postup odpojení od relace bez zastavení kontejneru.
Odpojení bez zastavení
Docker podporuje kombinaci klávesnice pro elegantní odpojení od kontejneru. Chcete-li se odpojit od připojení, stiskněte Ctrl-P a poté Ctrl-Q.
Budete vhozeni zpět do svého shellu, ale dříve připojený proces zůstane naživu a udrží váš kontejner v chodu. Můžete to zkontrolovat pomocí docker ps
získat seznam běžících kontejnerů.
Stiskněte Ctrl-C nebo spusťte exit
příkaz obvykle ukončí proces na popředí kontejneru, pokud nebyl speciálně nakonfigurován. Kontejner Docker musí mít spuštěný proces v popředí; kontejner bez něj přejde do stavu zastavení.
Změna sekvence odpojení klávesnice
Sekvenci odpojení můžete změnit tak, aby odpovídala vašim preferencím, nebo se vyhnout konfliktu s klávesovými zkratkami, které vaše aplikace používá. Přidejte detachKeys
vlastnost do vašeho ~/.docker/config.json
soubor k určení klíčů, které chcete použít.
Docker podporuje a-z
znaky a @
, ^
a _
, symboly a také znak levé závorky ([
) a dvě zpětná lomítka (\
). Všechny se používají ve spojení s Ctrl-
klíč; písmena lze také použít jednotlivě, bez Ctrl
.
Klíčové sekvence jsou vyjádřeny jako seznam oddělený čárkami:
{ "detachKeys": "Ctrl-d,d" }
Tento příklad se odpojí od kontejneru, když stisknete Ctrl-D
bezprostředně následované d
klíč.
Změna sekvence na základě kontejneru
Kromě změny vaší globální konfigurace přijímá Docker detachKeys
přepíše na základě jednotlivých kontejnerů a příloh. Přidejte --detach-keys
příznak k příkazům, které se mohou připojit ke kontejnerovým procesům a nastavit konkrétní sekvenci.
Příkazy, které to podporují, jsou:
docker run
docker run
docker exec
docker attach
Zde je návod, jak připojit ke kontejneru a poté použít Ctrl-d
, za kterým následuje podtržítko pro odpojení:
docker attach my-container --detach-keys="Ctrl-d,_"
--detach-keys
flag používá stejný formát sekvence kláves jako detachKeys
možnost konfigurace. Příznak přepíše váš docker.json
nastavení; to zase přepíše výchozí sekvenci Ctrl-P/Ctrl-Q v Dockeru.
Odpojení, když sekvence klávesnice nebude fungovat
Někdy se můžete setkat s procesem kontejneru, který se odmítne odpojit, i když zadáte sekvenci klávesnice. K tomu může dojít, pokud vstupní stream kontejneru není připojen k vašemu terminálu (-i
příznak) nebo nemá přidělené žádné pseudo-TTY (-t
vlajka). Na tento problém můžete narazit také v případě, že proces vašeho kontejneru zpracovává sekvenci klíčů pro odpojení a vy jste ji při připojení nepřepsali.
Za těchto okolností je stále možné odpojit terminál od kontejneru. Musíte dočasně otevřít další okno shellu a použít ho k zabití docker.attach
proces, který udržuje přílohu aktivní.
Nejprve najděte ID procesu procesu přílohy:
ps -ef | grep attach
Použijte výstup z ps
k identifikaci docker.attach
proces, který musíte zabít. Příkaz v CMD
sloupec by měl identifikovat přílohu, kterou hledáte. Poznamenejte si příslušné číslo PID a použijte kill
příkaz k ukončení tohoto procesu:
kill -9 <PID>
Měli byste vidět, jak se váš původní shell oddělil od kontejneru Docker a vrátil se do normálního provozního stavu. Nyní můžete zavřít druhý shell a pokračovat v používání původního.
Tato technika funguje tak, že zabíjí proces Docker CLI, který připojil terminál ke kontejneru, nikoli proces v kontejneru, který jej udržuje v chodu. Váš původní terminál bude znovu použitelný a kontejner zůstane nahoře.
Opětovné připojení k vašemu kontejneru
Ke kontejnerům můžete znovu připojit pomocí docker attach
příkaz. Tím se automaticky připojí vstupní, výstupní a chybové proudy vašeho terminálu k určenému kontejneru:
docker attach my-container
Všechny tři streamy jsou standardně připojeny. Vstupní proud můžete vynechat předáním --no-stdin
vlajka. Výstup kontejneru bude streamován do vašeho terminálu, ale nebudete moci poskytnout žádný vstup.
Pro odpojení použijte znovu sekvenci kláves nebo Ctrl-C
k zastavení procesu a kontejneru. Pokud použijete Ctrl-C
nebo exit
, docker attach
nastaví $?
proměnnou ve vašem shellu správně, abyste mohli zkontrolovat výstupní kód kontejneru.
Přehled
Správný způsob, jak se odpojit od kontejneru Docker, je poměrně obskurní sekvence klávesnice, která vás vrátí zpět do vašeho shellu. Tuto sekvenci si můžete přizpůsobit, abyste si ji lépe zapamatovali a předešli konfliktům s manipulací s klávesnicí ve vašem kontejneru.
Sekvence odpojení klávesnice mohou být za určitých okolností neúčinné. Stále je možné se odpojit od vašeho kontejneru identifikací a ukončením procesu, který podporuje připojení. Běžné unixové příkazy jako ps
a kill
by měl být použit v tomto scénáři.
Nakonec, pokud chcete, aby byl kontejner trvale odpojen, začněte jej pomocí -d
příznak (docker run -d my-image:latest
). To odešle kontejner přímo do pozadí a nevyšle žádný výstup do vašeho shellu. Oddělené kontejnery jsou vždy viditelné pomocí docker ps
a lze jej zastavit pomocí docker stop my-container
.