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

Dove Docker conserva i file di registro?

Il debug della maggior parte dei programmi Linux di solito comporta il controllo dei file di registro, che può essere un processo complesso. Tuttavia, durante l'esecuzione in un ambiente containerizzato in Docker, dovrai utilizzare strumenti più specifici per eseguire il debug delle app in produzione.

Dove vengono archiviati i log?

La semplice risposta è che Docker archivia i log dei container nella sua posizione di archiviazione principale, /var/lib/docker/ . Ogni container ha un log specifico per il suo ID (l'ID completo, non quello abbreviato che viene solitamente visualizzato) e puoi accedervi in ​​questo modo:

/var/lib/docker/containers/ID/ID-json.log

Ecco dove sono archiviati, ma poiché sono in formato JSON, non sono facilmente leggibili e dover utilizzare l'ID contenitore completo è fastidioso. Docker fornisce un comando integrato per visualizzarli:

docker logs -f e4bd48ef3103

Qui, il -f flag manterrà il prompt aperto e "seguirà" tutte le nuove voci nel file. Puoi anche --tail il file, oppure usa --timestamps per visualizzare l'ora del registro, oppure usa --until--since per filtrare in base al tempo.

Se stai utilizzando Docker Compose, puoi utilizzare il comando log da esso per visualizzare facilmente tutti i registri:

docker-compose logs

Tuttavia, una cosa che noterai è che questo è STDOUT e STDERR, che è utile per molte cose, ma mostra solo l'output della console del punto di ingresso specificato da "CMD" nel file Docker. Molte app hanno i propri sistemi di registrazione dedicati, che spesso accedono a file come /var/log/nginx/access.log . L'accesso a log come questo è ancora possibile dal lato host tramite Docker.

Visualizzazione dei log dalle app all'interno dei container

A seconda del contenitore, questo potrebbe non essere necessario. Ad esempio, il contenitore NGINX predefinito è impostato per inviare i suoi registri Docker a STDOUT per semplificare il controllo dei registri. Lo fa con un collegamento simbolico da /dev/stdout nel file di registro e puoi impostare qualcosa di simile per i tuoi contenitori.

RUN ln -sf /dev/stdout /var/log/nginx/access.log 
&& ln -sf /dev/stderr /var/log/nginx/error.log

Tuttavia, se desideri controllare file specifici all'interno di un contenitore, puoi farlo. Docker fornisce exec -it comando per consentire di eseguire qualsiasi comando all'interno di qualsiasi processo Docker in esecuzione. Usando questo, puoi accodare un file di registro all'interno di un contenitore Docker:

docker exec -it e4bd48ef3103 tail -f log.txt

Poiché ciò ti consente di eseguire qualsiasi comando, puoi utilizzare journalctl o qualsiasi altra strategia di debug che desideri, a condizione che venga premessa con docker exec -it . Puoi persino eseguire /bin/bash se vuoi saltare e dare un'occhiata.

Una soluzione più permanente che funziona meglio con i servizi host consiste nell'usare un montaggio del volume Docker. Puoi associare una directory come /var/log/nginx a un volume visibile dall'host. Innanzitutto, crea un nuovo volume:

docker volume create nginx-logs

Ed esegui il container con --mount :

docker run -d 
--name devtest 
--mount source=nginx-logs,target=/var/log/nginx 
nginx:latest

Se utilizzi Docker Compose, il processo può essere automatizzato:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-logs:/var/log/nginx/
volumes:
  nginx-logs:

In questo modo, i file di registro saranno direttamente ingeribili da qualsiasi servizio di aggregazione dei registri sulla macchina host.

Visualizzazione dei registri di Docker Daemon

Se invece desideri visualizzare i log specifici per il servizio Docker generale sul tuo server e non qualsiasi app containerizzata specifica, ti consigliamo di visualizzare il journalctl registri:

sudo journalctl -fu docker.service

Qui è dove è memorizzato sulla maggior parte dei sistemi, ma in alcuni si trova in una posizione diversa:

  • Amazon Linux:/var/log/docker
  • CentOS/RHEL:/var/log/messages | grep docker
  • macOS:~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
  • Windows:AppDataRoamingDockerlogvmdockerd.log

Docker
  1. Comando per ripulire i vecchi file di registro?

  2. Come riprodurre file .swf?

  3. Come modificare il percorso del registro di controllo in MySQL Docker

  4. Dove Linux Mint conserva i file per gli sfondi desktop predefiniti?

  5. Dove make install mette i file?

Dove vengono archiviate le immagini e i contenitori Docker nell'host?

Come centralizzare la gestione dei registri con Graylog utilizzando Docker

Come copiare file con Docker cp nel tuo Docker Container

Mantieni gestibili le tue immagini Docker con Docker Image Prune

Come copiare file tra host e contenitore Docker

Come accedere ai file al di fuori di un contenitore Docker