Come staccarsi da un container Docker senza fermarlo

0
142

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. Premendo Ctrl-C di solito si interrompe il processo
, causando l'arresto del contenitore. Ecco come staccarsi da una sessione senza fermare il contenitore.

Distaccarsi senza fermarsi

Docker supporta una combinazione di tasti per staccare con grazia da un contenitore. Premi Ctrl-P, seguito da Ctrl-Q, per disconnetterti dalla tua connessione.

Verrai riportato nella tua shell ma il processo precedentemente collegato rimarrà attivo, mantenendo il tuo contenitore in esecuzione. Puoi verificarlo utilizzando docker ps per ottenere un elenco di contenitori in esecuzione.

Premendo Ctrl-C o eseguendo il comando exit di solito si interrompe il processo in primo piano del contenitore a meno che non sia stato configurato in modo speciale. Un contenitore Docker deve avere un processo in primo piano in esecuzione; un contenitore senza entrerà nello stato di arresto.

Modifica della sequenza di scollegamento della tastiera

Puoi modificare la sequenza di scollegamento in modo che corrisponda la tua preferenza o evita un conflitto con le scorciatoie da tastiera onorate dalla tua applicazione. Aggiungi una proprietà detachKeys al tuo file ~/.docker/config.json per specificare le chiavi che desideri utilizzare.

Annuncio

Docker supporta i caratteri a-z e i simboli @, ^ e _, nonché il segno della parentesi quadra sinistra ([) e due barre rovesciate (\). Questi sono tutti usati insieme al tasto Ctrl-; le lettere possono essere utilizzate anche singolarmente, senza Ctrl.

Le sequenze di tasti sono espresse come un elenco separato da virgole:

{ "detachKeys": "Ctrl-d,d" }

Questo esempio si staccherebbe dal contenitore quando premi Ctrl-D seguito immediatamente dal tasto d.

Modifica della sequenza in base al contenitore

Oltre a modificare la configurazione globale, Docker accetta le sostituzioni di detachKeys in base al contenitore e all'allegato. Aggiungi il flag –detach-keys ai comandi che possono essere collegati ai processi del contenitore per impostare una sequenza specifica.

I comandi che supportano questo sono:

  • docker run
  • docker start
  • docker exec
  • docker attach

Ecco come collegarsi a un contenitore e quindi utilizzare Ctrl-d, seguito da un trattino basso, per staccare:

docker attach my-container –detach-keys=”Ctrl-d,_”

Il flag –detach-keys utilizza lo stesso formato di sequenza di tasti dell'opzione di configurazione detachKeys. Il flag sovrascrive l'impostazione docker.json; questo a sua volta sovrascrive la sequenza Ctrl-P/Ctrl-Q predefinita di Docker.

Disconnessione quando la sequenza della tastiera ha vinto 8217;t lavoro

A volte potresti incontrare un processo contenitore che si rifiuta di scollegarsi, anche quando emetti la sequenza di tasti. Questo può accadere se il flusso di input del contenitore non è connesso al terminale (flag -i) o non ha allocato pseudo-TTY (flag -t). Potresti anche riscontrare questo problema se il processo del tuo contenitore gestisce la sequenza di tasti di scollegamento e non l'hai sovrascritta quando l'hai collegata.

Annuncio

È ancora possibile staccare il terminale dal container in queste circostanze. Devi aprire temporaneamente un'altra finestra della shell e usarla per terminare il processo docker.attach che mantiene attivo l'allegato.

Prima trova l'ID del processo dell'allegato:

ps -ef | grep attach

Utilizza l'output di ps per identificare il processo docker.attach che devi terminare. Il comando nella colonna CMD dovrebbe identificare l'allegato che stai cercando. Annota il numero PID pertinente e usa il comando kill per terminare questo processo:

kill -9 <PID>

Dovresti vedere la tua shell originale staccarsi dal 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 contenitore, non il processo all'interno del contenitore che lo mantiene in esecuzione. Il tuo terminale originale diventa di nuovo utilizzabile e il contenitore rimane attivo.

Ricollegamento al tuo contenitore

Puoi ricollegarti ai contenitori utilizzando il comando docker attach. Questo collega automaticamente i flussi di input, output e errore del 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 flag –no-stdin. L'output del contenitore verrà inviato in streaming al tuo terminale ma non sarai in grado di fornire alcun input.

Annuncio

Usa di nuovo la sequenza della tastiera per scollegare o Ctrl-C per interrompere il processo e il contenitore. Se usi Ctrl-C o esci, docker attach imposterà $? variabile nella tua shell correttamente in modo da poter ispezionare il codice di uscita del contenitore.

Riepilogo

Il modo corretto per staccarsi da un contenitore Docker è abbastanza sequenza di tastiera oscura che ti riporta nella tua shell. Puoi personalizzare questa sequenza per aumentare la memorabilità ed evitare qualsiasi conflitto con la gestione della tastiera del tuo contenitore.

Le sequenze di distacco della tastiera possono essere inefficaci in alcune circostanze. È ancora possibile staccarsi dal contenitore identificando e terminando il processo che supporta l'allegato. In questo scenario dovrebbero essere usati normali comandi Unix come ps e kill.

Infine, se vuoi che il tuo contenitore sia permanentemente scollegato, avvialo con il flag -d (docker run -d my-image: più recente). Questo invierà il contenitore direttamente in background e non emetterà alcun output alla tua shell. I contenitori scollegati sono sempre visibili utilizzando il comando docker ps e possono essere fermati con docker stop my-container.