I container Docker hanno una modalità interattiva che ti consente di collegare i flussi di input e output del tuo terminale al processo del container. La pressione di Ctrl-C in genere interrompe il
processo, provocando l'arresto del contenitore. Ecco per staccare da una sessione senza fermare il contenitore.
Staccare senza fermarsi
Docker supporta una combinazione di tasti per staccare con grazia da un contenitore. Premi Ctrl-P, seguito da Ctrl-Q, per staccarti dalla connessione.
Verrai ricondotto nella shell ma il processo precedentemente allegato rimarrà attivo, mantenendo in esecuzione il tuo contenitore. Puoi verificarlo usando docker ps
per ottenere un elenco dei contenitori in esecuzione.
Premendo Ctrl-C o eseguendo exit
il comando di solito ucciderà il processo in primo piano del contenitore a meno che non sia stato configurato in modo speciale. Un container Docker deve avere un processo in primo piano in esecuzione; un container senza uno entrerà nello stato di arresto.
Modifica della sequenza di scollegamento della tastiera
È possibile modificare la sequenza di distacco in base alle proprie preferenze o evitare un conflitto con le scorciatoie da tastiera rispettate dall'applicazione. Aggiungi un detachKeys
proprietà al tuo ~/.docker/config.json
per specificare le chiavi che desideri utilizzare.
Docker supporta il a-z
caratteri e @
, ^
e _
, simboli, nonché la parentesi quadra sinistra ([
) e due barre rovesciate (\
). Questi sono tutti usati insieme a Ctrl-
chiave; le lettere possono essere usate anche singolarmente, senza Ctrl
.
Le sequenze di tasti sono espresse come un elenco separato da virgole:
{ "detachKeys": "Ctrl-d,d" }
Questo esempio si staccherà dal contenitore quando premi Ctrl-D
immediatamente seguito da d
chiave.
Modifica della sequenza in base al container
Oltre a modificare la configurazione globale, Docker accetta detachKeys
sovrascrive in base al contenitore e all'allegato. Aggiungi il --detach-keys
contrassegna i comandi che possono essere collegati ai processi contenitore per impostare una sequenza specifica.
I comandi che lo supportano sono:
docker run
docker start
docker exec
docker attach
Ecco come collegare a un contenitore e quindi utilizzare Ctrl-d
, seguito da un trattino basso, per staccare:
docker attach my-container --detach-keys="Ctrl-d,_"
I --detach-keys
flag usa lo stesso formato di sequenza di tasti di detachKeys
opzione di configurazione. Il flag sovrascrive il tuo docker.json
collocamento; questo a sua volta sovrascrive la sequenza predefinita Ctrl-P/Ctrl-Q di Docker.
Scollegamento quando la sequenza della tastiera non funziona
A volte potresti riscontrare un processo contenitore che si rifiuta di scollegarsi, anche quando emetti la sequenza della tastiera. Questo può accadere se il flusso di input del container non è collegato al tuo terminale (-i
flag) o non ha allocato pseudo-TTY (-t
bandiera). Potresti anche riscontrare questo problema se il processo del tuo contenitore gestisce la sequenza di chiavi di scollegamento e non l'hai sovrascritta quando l'hai collegata.
In queste circostanze è ancora possibile staccare il terminale dal container. Devi aprire temporaneamente un'altra finestra della shell e usarla per terminare docker.attach
processo che mantiene attivo l'allegato.
Per prima cosa trova l'ID processo del processo di allegato:
ps -ef | grep attach
Usa l'output di ps
per identificare il docker.attach
processo che devi uccidere. Il comando nel CMD
colonna dovrebbe identificare l'allegato che stai cercando. Annota il numero PID rilevante e usa il kill
comando per terminare questo processo:
kill -9 <PID>
Dovresti vedere la tua shell originale staccarsi dal tuo contenitore Docker e tornare a uno stato operativo normale. Ora puoi chiudere la seconda shell e continuare a utilizzare quella originale.
Questa tecnica funziona uccidendo il processo Docker CLI che ha collegato il terminale al container, non il processo all'interno del container che lo mantiene in esecuzione. Il tuo terminale originale diventa di nuovo utilizzabile e il container rimane in alto.
Ricollegamento al tuo container
Puoi ricollegarti ai contenitori utilizzando il docker attach
comando. Questo collega automaticamente i flussi di input, output e di errore del tuo terminale al contenitore specificato:
docker attach my-container
Tutti e tre i flussi sono collegati per impostazione predefinita. Puoi omettere il flusso di input passando il --no-stdin
bandiera. L'output del container verrà trasmesso in streaming al tuo terminale ma non sarai in grado di fornire alcun input.
Usa di nuovo la sequenza della tastiera per staccare, o Ctrl-C
per fermare il processo e il contenitore. Se usi Ctrl-C
o exit
, docker attach
imposterà il $?
nella tua shell correttamente in modo da poter controllare il codice di uscita del contenitore.
Riepilogo
Il modo corretto per staccare da un contenitore Docker è una sequenza di tastiera abbastanza oscura che ti riporta nella shell. Puoi personalizzare questa sequenza per aumentare la memorabilità ed evitare qualsiasi conflitto con la gestione della tastiera del tuo contenitore.
Le sequenze di scollegamento della tastiera possono essere inefficaci in alcune circostanze. È ancora possibile staccarsi dal tuo contenitore identificando e uccidendo il processo che sta supportando l'allegato. Comandi Unix regolari come ps
e kill
dovrebbe essere utilizzato in questo scenario.
Infine, se vuoi che il tuo container sia permanentemente staccato, avvialo con -d
flag (docker run -d my-image:latest
). Questo invierà il contenitore direttamente in background e non emetterà alcun output sulla tua shell. I contenitori staccati sono sempre visibili utilizzando la docker ps
comando e può essere interrotto con docker stop my-container
.