In questo articolo, ti mostreremo tutto ciò che devi sapere sui log Docker e su come utilizzarli.
La vita sarebbe molto più semplice se le applicazioni in esecuzione all'interno dei contenitori Docker si comportassero sempre correttamente. Quando le cose iniziano inevitabilmente ad andare storte, hai bisogno di informazioni diagnostiche per capire come e perché.
Se sei un amministratore di sistema e responsabile della creazione e della gestione di applicazioni containerizzate, la registrazione Docker è una delle più importanti per te. La gestione dei log è uno dei modi migliori per rivelare errori, facilitare il debug e ottimizzare le prestazioni dell'applicazione.
Quindi analizziamo la registrazione Docker e i suoi file di registro.
Cosa sono i registri Docker
Innanzitutto, devi capire come vengono generati i log.
In poche parole, I registri Docker sono l'output della console dei contenitori in esecuzione . Forniscono il stdout
(output standard) e stderr
(errore standard) flussi di processi eseguiti all'interno di un contenitore. In un container Docker osserva stdout
e stderr
e raccoglie l'output dai flussi, e questa è l'origine dei log del contenitore.
Accedere a Docker non è lo stesso che accedere altrove. In Docker, tutto viene scritto su stdout
e stderr
flussi viene inviato implicitamente a un driver di registrazione, che fornisce un meccanismo per accedere a questi flussi e inviare i registri a un file. Il driver predefinito per i registri Docker è "json-file", che scrive i registri nei file locali sull'host Docker in formato JSON.
Tutti i log archiviati nel contenitore verranno eliminati al termine o all'arresto.
L'esempio seguente mostra i log JSON creati utilizzando il driver del file json:
{"log":"Adding password for user webdav\n","stream":"stderr","time":"2021-08-01T15:58:05.329724917Z"}
È possibile utilizzare il comando seguente per trovare il driver di registrazione predefinito corrente:
docker info --format '{{.LoggingDriver}}'
json-file
Dove sono archiviati i registri Docker
Se utilizzi il formato di registro predefinito che è JSON, i registri di un container possono essere trovati in /var/lib/docker/containers/
directory su un host Docker Linux.
/var/lib/docker/containers/<container-id>/<container-id>-json.log
Nel percorso mostrato sopra, <container-id>
è l'id del contenitore in esecuzione. Se non sei sicuro di quale id è correlato a quale container, puoi eseguire il docker container ls
comando per elencare tutti i contenitori in esecuzione.
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99e9b6f4b1a3 jbbodart/alpine-nginx-webdav "/bin/sh -c '/entryp…" 51 minutes ago Up 51 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp webdav
Come visualizzare i registri Docker
Supponiamo che tu stia eseguendo un container e desideri accedere ai log Docker per questo container. Come puoi portare a termine questo compito?
Innanzitutto, puoi utilizzare il comando seguente per verificare la presenza di contenitori attualmente in esecuzione:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99e9b6f4b1a3 jbbodart/alpine-nginx-webdav "/bin/sh -c '/entryp…" 58 minutes ago Up 58 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp webdav
Questo comando stampa un elenco di contenitori in esecuzione. Nel nostro caso, il parametro più importante è CONTAINER ID , che utilizzeremo nel passaggio successivo.
Ora che sei sicuro che il tuo container sia in esecuzione, utilizziamo l'ID CONTAINER per vedere tutti i suoi registri.
Visualizza registri Docker
Per eseguire query sui log dei contenitori, utilizza i docker logs
comando. È un comando che mostra tutte le informazioni registrate da un container in esecuzione. Con docker logs CONTAINER_ID
, puoi vedere tutti i log trasmessi da uno specifico contenitore identificato da un ID univoco.
docker logs 99e9b6f4b1a3
172.17.0.1 - webdav [01/Aug/2021:18:38:39 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
2021/08/01 18:39:09 [info] 10#10: *3 client 172.17.0.1 closed keepalive connection
172.17.0.1 - webdav [01/Aug/2021:18:39:09 +0000] "PUT /docker-logs.png HTTP/1.1" 201 25 "-" "curl/7.78.0"
Come seguire il registro del contenitore
Sebbene questo ti mostrerà i registri, non ti consentirà di visualizzare l'output del registro continuo. Usando il -f
flag seguirà i log del contenitore Docker.
docker logs -f 99e9b6f4b1a3
Visualizza solo le ultime righe
In alcuni casi, vuoi verificare rapidamente solo le ultime 10 righe di log per il tuo contenitore. Puoi utilizzare il --tail
opzione per specificare il numero di registri che desideri visualizzare.
docker logs --tail 10 99e9b6f4b1a3
Visualizza registri da una data specifica
Quando si ispezionano i registri Docker, spesso si desidera limitare l'output a un determinato numero di righe, per non essere inondati di informazioni.
Se vuoi vedere i log da un momento specifico fino ad ora, il --since
l'opzione aiuta con questa attività.
Ad esempio, per visualizzare i log dei contenitori da 20 minuti, dovresti scrivere:
docker logs --since 20m 99e9b6f4b1a3
Puoi anche scrivere un formato data purché sia fornito in formato ISO:
docker logs --since 2021-07-19T10:00:00 99e9b6f4b1a3
Visualizza registri fino a una data specifica
Per visualizzare i registri fino a una data specifica, utilizza il --until
opzione con una data o una durata.
docker logs --until 20m 99e9b6f4b1a3
Oppure puoi anche fornire un formato data come hai fatto prima per il --since
opzione.
docker logs --until
2021-07-19T10:00:00 99e9b6f4b1a3
Conclusione
I registri Docker ti aiutano a eseguire il debug e a risolvere i problemi più velocemente. In questo tutorial hai imparato cosa sono e come possono essere ispezionati e come utilizzare le opzioni per monitorarli.
Se hai domande o feedback, sentiti libero di lasciare un commento.