Docker - Contenitori e conchiglie

Per impostazione predefinita, quando avvii un contenitore, utilizzerai anche un file shell commanddurante l'avvio del contenitore come mostrato di seguito. Questo è ciò che abbiamo visto nei capitoli precedenti quando lavoravamo con i contenitori.

Nello screenshot sopra, puoi osservare che abbiamo emesso il seguente comando:

sudo docker run –it centos /bin/bash

Abbiamo usato questo comando per creare un nuovo contenitore e poi abbiamo usato il comando Ctrl + P + Q per uscire dal contenitore. Assicura che il contenitore esista ancora anche dopo essere usciti dal contenitore.

Possiamo verificare che il container esista ancora con Docker pscomando. Se dovessimo uscire direttamente dal container, il container stesso verrebbe distrutto.

Ora c'è un modo più semplice per attaccarsi ai contenitori e uscirli in modo pulito senza la necessità di distruggerli. Un modo per ottenere ciò è utilizzare ilnsenter comando.

Prima di eseguire il file nsenter comando, devi prima installare il nsenterImmagine. Può essere fatto utilizzando il seguente comando:

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

Prima di utilizzare il file nsenter , dobbiamo ottenere l'ID del processo del contenitore, perché questo è richiesto dal nsentercomando. Possiamo ottenere l'ID processo tramite Dockerinspect command e filtrandolo tramite Pid.

Come si vede nello screenshot qui sopra, abbiamo prima usato il docker pscomando per vedere i contenitori in esecuzione. Possiamo vedere che c'è un container in esecuzione con l'ID di ef42a4c5e663.

Quindi usiamo il Docker inspect comando per ispezionare la configurazione di questo contenitore e quindi utilizzare il grepcomando per filtrare solo l'ID processo. E dall'output, possiamo vedere che l'ID processo è 2978.

Ora che abbiamo l'ID del processo, possiamo procedere e utilizzare il file nsenter comando da allegare al contenitore Docker.

nsenter

Questo metodo consente di collegarsi a un contenitore senza uscire dal contenitore.

Sintassi

comando nsenter –m –u –n –p –i –t containerID

Opzioni

  • -u è usato per menzionare il Uts namespace

  • -m è usato per menzionare il mount namespace

  • -n è usato per menzionare il network namespace

  • -p è usato per menzionare il process namespace

  • -i s per far funzionare il container in modalità interattiva.

  • -t viene utilizzato per connettere i flussi di I / O del contenitore al sistema operativo host.

  • containerID - Questo è l'ID del contenitore.

  • Command - Questo è il comando da eseguire all'interno del contenitore.

Valore di ritorno

Nessuna

Esempio

sudo nsenter –m –u –n –p –i –t 2978 /bin/bash

Produzione

Dall'output possiamo osservare i seguenti punti:

  • Il prompt cambia in bash shell direttamente quando emettiamo il file nsenter comando.

  • Quindi emettiamo il file exitcomando. Ora normalmente se non hai usato il filensentercomando, il contenitore verrebbe distrutto. Ma noterai che quando eseguiamo il filensenter comando, il contenitore è ancora attivo e in esecuzione.