Où se trouve un fichier journal avec les journaux d'un conteneur?

117

J'utilise plusieurs conteneurs docker-compose. Je peux voir les journaux d'application avec la commande docker-compose logs. Cependant, je voudrais accéder au fichier journal brut pour l'envoyer quelque part par exemple? Où est-il situé? Je suppose que c'est un journal séparé pour chaque conteneur (à l'intérieur du conteneur?) Mais où puis-je le trouver?

user606521
la source

Réponses:

191

Les journaux d'un conteneur peuvent être trouvés dans:

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

(si vous utilisez le format de journal par défaut qui est json)

Michael
la source
3
Il y a beaucoup de dossiers comme 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Comment savoir quel dossier rechercher pour un conteneur particulier?
Praveen Sripati
3
@PraveenSripati, l'ID du conteneur pour l'exécution des conteneurs est affiché dans la première colonne si vous le faitesdocker ps
CS
1
@PraveenSripati écris docker ps, vous obtiendrez tous vos conteneurs disponibles avec leurs identifiants. Copiez l'ID de votre conteneur souhaité, puis de /var/lib/docker/containers/run ls | grep <paste the copied docker ID>. Ensuite, vous verrez ce conteneur de docker
TheLebDev
cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / containers /: Autorisation refusée sudo cd /var/lib/docker/containers/ sudo: cd: commande non trouvée
canbax
2
@Chris que je devais faire docker ps --no-truncpour voir l'identité entière
Dan Z
97

Vous pouvez docker inspectchaque conteneur pour voir où se trouvent leurs journaux:

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

Et, au cas où vous tenteriez de déterminer où les journaux devaient gérer leur taille collective, ou ajuster les paramètres de la journalisation elle-même, vous trouverez ce qui suit pertinent.

Correction de la quantité d'espace réservé aux logs

Ceci est tiré de la demande pour la possibilité d'effacer l'historique du journal (problème 1083) ):

Docker 1.8 et docker-compose 1.4 il existe déjà une méthode pour limiter la taille du journal à l'aide du pilote de journal docker compose et de la taille maximale de log-opt:

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

Dans le docker compose les fichiers de la version '2', la syntaxe a un peu changé:

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

(notez que dans les deux syntaxes, les nombres sont exprimés sous forme de chaînes, entre guillemets)

Problème possible avec la docker-compose logsnon-résiliation

  • problème 1866 : la commande logsne se termine pas si le conteneur est déjà arrêté
VonC
la source
1
La version courte: docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David
12

Pour voir l'espace occupé par le journal de chaque conteneur, utilisez ceci:

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

(vous pourriez avoir besoin d'un sudoavant ls).

Ce gars brésilien
la source
Je reçois une autorisation refusée.
Shakedk
1
L'ajout de sudo à la fin a aidé: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk
2

Pour afficher directement le fichier journal en moins, j'utilise:

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

exécuté en tant que ./viewLogs.sh CONTAINERNAME

glacier
la source
2

Sous Windows, l'emplacement par défaut est: C:\ProgramData\Docker\containers\<container-id>-json.log.

pmohandas
la source
C'est celui-ci lors de l'exécution d'un conteneur local pour le développement! merci - il était très difficile de trouver cette info
Percy
1

Depuis le 22/08/2018, les journaux se trouvent dans:

/data/docker/containers/<container id>/<container id>-json.log
lixzhang
la source
1
docker inspect <containername> | grep log
Vasili Pascal
la source