GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come staccare da un contenitore Docker senza fermarlo

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 .


Docker
  1. Come installare WordPress utilizzando Docker

  2. Come installare Vim in un contenitore Docker

  3. Come creare un'immagine personalizzata da un contenitore Docker

  4. Come creare un'immagine Docker da un contenitore e un file Docker

  5. Come accedere allo spazio dei nomi di rete di Docker Container dall'host

Come eseguire PHPMyAdmin in un contenitore Docker

Come ispezionare il contenuto di un'immagine Docker senza avviare un contenitore

Come eseguire Grafana in un contenitore Docker

Come creare un'immagine Docker da un contenitore in esecuzione

Come configurare un container Docker Apache

Come eseguire i contenitori Docker