Docker utilizza un'architettura basata su daemon in cui la CLI si connette a un processo di lunga durata in esecuzione separatamente sulla macchina o su un host remoto. I comandi CLI non funzioneranno e i tuoi container di solito andranno offline se il demone si interrompe.
Ecco come verificare se il daemon di Docker è attivo in modo da poter diagnosticare problemi con i contenitori e la dockerd
comando. Quando il demone non è in esecuzione, vedrai un messaggio "impossibile connettersi al demone Docker" ogni volta che usi la dockerd
CLI.
Verifica con Systemctl
Puoi controllare lo stato di Docker con systemctl
su distribuzioni che utilizzano Systemd per la gestione dei servizi. Questo copre la maggior parte dei sistemi operativi più diffusi, inclusi Debian, Ubuntu, CentOS e Red Hat.
sudo systemctl status docker
Controlla cosa viene visualizzato in "Attivo". Se vedi active (running)
in verde, il demone Docker è in esecuzione e i tuoi contenitori dovrebbero essere attivi.
Uno stato attivo di inactive
indica che il servizio è stato interrotto. Prova a visualizzarlo eseguendo sudo systemctl start docker
. Lo stato dovrebbe cambiare in active (running)
dopo l'avvio del demone.
Se vedi uno stato di failed
in rosso, il demone non può avviarsi a causa di un errore. Dovresti rivedere i log di avvio del servizio mostrati più avanti in systemctl
output del comando poiché di solito contengono suggerimenti che ti consentono di capire cosa è andato storto.
Quando non è disponibile una risoluzione evidente, avvia manualmente il demone in modalità di debug per ottenere maggiori informazioni sulla sua routine di avvio.
sudo dockerd --debug
Riavviare la macchina host o riavviare il servizio Docker con systemctl restart docker
può aiutare anche ad alleviare problemi transitori.
Ispezione dei dettagli del processo
Un altro modo per verificare la presenza di un demone Docker in esecuzione è ispezionare il suo file ID processo. Il demone scrive il suo ID processo in /var/run/docker.pid
ogni volta che si avvia. Quando questo file esiste, Docker dovrebbe essere in esecuzione e pronto per le connessioni CLI.
cat /var/run/docker.pid
Puoi usare questa tecnica per creare script programmatici che controllano se il demone è vivo. La lettura del file ti fornisce l'ID che puoi utilizzare con strumenti come top
per ottenere maggiori informazioni sulla procedura Docker:
cat /var/run/docker.pid # process id = 1000 top -p 1000
Puoi anche ottenere l'ID del processo con il pidof
comando. Questo accetta un nome di processo e restituisce il primo ID corrispondente:
pidof dockerd # process id = 1000 # view information with top top -p `pidof dockerd`
C'è un demone Docker attivo sulla tua macchina se top
corrisponde a un dockerd
processi. Questo può essere più affidabile che cercare docker.pid
– se il demone si arresta in modo anomalo, docker.pid
potrebbe rimanere indietro al termine del processo.
Gestione dei file di processo bloccati
Il demone rifiuterà di riavviarsi quando è presente un file PID. Questo potrebbe bloccarti in un ciclo di riavvio se il file è effettivamente orfano da un'esecuzione precedente. Vedrai questo messaggio durante l'esecuzione di dockerd
:
failed to start daemon: pid file found, ensure docker is not running or delete /var/run/docker.pid
Usa pidof dockerd
per assicurarsi che Docker sia effettivamente fermato. Procedi se il comando non emette alcun output, confermando che non è in corso alcun processo.
Esegui sudo rm /var/run/docker.pid
per eliminare il vecchio file ID processo. Il demone dovrebbe ora avviarsi correttamente la prossima volta che esegui dockerd
o service docker start
.
I problemi del file PID si verificano comunemente quando si esegue lo snapshot di una macchina virtuale e quindi si crea una nuova istanza dall'immagine. Il file di processo verrà incluso nello snapshot, facendo sì che il daemon Docker nella nuova VM pensi che sia già in esecuzione.
Controllo dei singoli contenitori
È possibile accedere allo stato dei singoli contenitori tramite la docker ps
comando. Viene emessa una tabella contenente i dettagli di tutti i container attualmente in esecuzione.
docker ps
Combina il docker ps
comando con grep
per verificare facilmente se un container specifico è in esecuzione per ID o nome:
docker ps | grep my-container-name
Ora l'output verrà filtrato per mostrare il contenitore che hai selezionato. Non ci saranno record se il container non è in esecuzione.
I contenitori interrotti vengono visualizzati utilizzando docker ps -a
. Un container interrotto può essere avviato con docker start
comando:
docker start my-container
Il contenitore si sposterà quindi nella normale docker ps
produzione. Puoi interromperlo di nuovo con docker stop my-container
.
Conclusione
Hai diverse opzioni da considerare quando vuoi sapere se Docker è in esecuzione. C'è il gestore dei servizi del tuo sistema operativo, il docker.pid
file e strumenti di ispezione di processo regolari come top
e pidof
.
Quando si tratta di singoli contenitori, docker ps
fornisce l'elenco di tutto ciò che è attualmente in esecuzione sul tuo host. Informazioni più complete sullo stato di qualsiasi container possono essere raccolte con docker inspect container-name
che fornisce dettagli sulla configurazione di rete, i volumi e le etichette in formato JSON.