Dove si trova un file di registro con i registri di un contenitore?


117

Sto eseguendo diversi contenitori utilizzando docker-compose. Riesco a vedere i log dell'applicazione con il comando docker-compose logs. Tuttavia vorrei accedere al file di registro grezzo per inviarlo da qualche parte, ad esempio? Dove si trova? Immagino che sia un registro separato per ogni contenitore (all'interno del contenitore?) Ma dove posso trovarlo?

Risposte:


191

I log di un container possono essere trovati in:

/var/lib/docker/containers/<container id>/<container id>-json.log

(se utilizzi il formato di registro predefinito che è json)


3
Ci sono molte cartelle come 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Come sapere quale cartella cercare per un particolare contenitore?
Praveen Sripati

3
@PraveenSripati l'ID del contenitore per l'esecuzione dei contenitori è mostrato nella prima colonna se lo faidocker ps
CS

1
@ PraveenSripati scrivi docker ps, otterrai tutti i contenitori disponibili insieme ai loro ID. Copia l'ID del contenitore desiderato, quindi da /var/lib/docker/containers/Esegui ls | grep <paste the copied docker ID>. Quindi vedrai quel container
docker

cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / containers /: Autorizzazione negata sudo cd /var/lib/docker/containers/ sudo: cd: comando non trovato
canbax

2
@ Chris che dovevo fare docker ps --no-truncper vedere l'intero id
Dan Z

97

Puoi vedere docker inspectogni container dove si trovano i loro log:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

E, nel caso in cui stavi cercando di capire dove fossero i log per gestire la loro dimensione collettiva, o per regolare i parametri del logging stesso, troverai quanto segue rilevante.

Correzione della quantità di spazio riservato ai log

Questo è tratto da Request for the capacity to clear log history (issue 1083) ):

Docker 1.8 e docker-compose 1.4 esiste già un metodo per limitare la dimensione del log utilizzando docker compose log driver e log-opt max-size:

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"

Nella finestra mobile componi i file della versione '2', la sintassi è leggermente cambiata:

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"

(nota che in entrambe le sintassi, i numeri sono espressi come stringhe, tra virgolette)

Possibile problema con la docker-compose logsmancata terminazione

  • problema 1866 : il comando logsnon esce se il contenitore è già stato arrestato

1
La versione breve: docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David

12

Per vedere quanto spazio sta occupando il registro di ogni contenitore, usa questo:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

(potresti aver bisogno di una sudoprima ls).


Ottengo un permesso negato.
Shakedk

1
L'aggiunta di sudo alla fine ha aiutato: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk

2

Per visualizzare direttamente il file di log in less, utilizzo:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less

eseguito come ./viewLogs.sh CONTAINERNAME


2

In Windows, il percorso predefinito è: C:\ProgramData\Docker\containers\<container-id>-json.log.


Questo è quello quando si esegue un contenitore locale per lo sviluppo! grazie - è stato molto difficile trovare queste informazioni
Percy

1

A partire dal 22/08/2018, i log possono essere trovati in:

/data/docker/containers/<container id>/<container id>-json.log

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.