GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Où Docker conserve-t-il les fichiers journaux ?

Le débogage de la plupart des programmes Linux implique généralement la vérification des fichiers journaux, ce qui peut être un processus complexe. Cependant, lors de l'exécution dans un environnement conteneurisé sous Docker, vous devrez utiliser des outils plus spécifiques pour déboguer les applications en production.

Où sont stockés les journaux ?

La réponse simple est que Docker stocke les journaux de conteneur dans son emplacement de stockage principal, /var/lib/docker/ . Chaque conteneur a un journal spécifique à son ID (l'ID complet, pas celui abrégé qui est généralement affiché) et vous pouvez y accéder comme suit :

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

C'est  ils sont stockés, mais comme ils sont au format JSON, ils ne sont pas facilement lisibles, et devoir utiliser l'ID complet du conteneur est ennuyeux. Docker fournit une commande intégrée pour les afficher :

docker logs -f e4bd48ef3103

Ici, le -f flag gardera l'invite ouverte et « suivra » toute nouvelle entrée dans le fichier. Vous pouvez également --tail le fichier, ou utilisez --timestamps pour afficher l'heure du journal, ou utilisez --until et --since pour filtrer en fonction du temps.

Si vous utilisez Docker Compose, vous pouvez utiliser la commande log pour afficher facilement tous les journaux :

docker-compose logs

Cependant, une chose que vous remarquerez est qu'il s'agit de STDOUT et STDERR, ce qui est utile pour beaucoup de choses, mais ne vous montre que la sortie de la console du point d'entrée spécifié par "CMD" dans le fichier Docker. De nombreuses applications ont leurs propres systèmes de journalisation dédiés, qui se connectent souvent à des fichiers tels que /var/log/nginx/access.log . L'accès à des journaux comme celui-ci est toujours possible du côté hôte via Docker.

Afficher les journaux des applications à l'intérieur des conteneurs

Selon le conteneur, cela peut ne pas être nécessaire. Par exemple, le conteneur NGINX par défaut est configuré pour envoyer ses journaux Docker à STDOUT afin de faciliter la vérification des journaux. Il le fait avec un lien symbolique de /dev/stdout au fichier journal, et vous pouvez configurer quelque chose de similaire pour vos conteneurs.

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

Mais si vous souhaitez extraire des fichiers spécifiques à l'intérieur d'un conteneur, vous pouvez le faire. Docker fournit le exec -it commande pour vous permettre d'exécuter n'importe quelle commande dans n'importe quel processus Docker en cours d'exécution. Grâce à cela, vous pouvez suivre un fichier journal dans un conteneur Docker :

docker exec -it e4bd48ef3103 tail -f log.txt

Comme cela vous permet d'exécuter n'importe quelle commande, vous pouvez utiliser journalctl ou toute autre stratégie de débogage de votre choix, à condition de la faire précéder de docker exec -it . Vous pouvez même exécuter /bin/bash si vous voulez sauter dedans et fouiller.

Une solution plus permanente qui fonctionne mieux avec les services hôtes consiste à utiliser un montage de volume Docker. Vous pouvez lier un répertoire comme /var/log/nginx à un volume visible depuis l'hôte. Tout d'abord, créez un nouveau volume :

docker volume create nginx-logs

Et exécutez le conteneur avec le --mount :

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

Si vous utilisez Docker Compose, le processus peut être automatisé :

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

De cette façon, les fichiers journaux seront directement ingérables par tous les services d'agrégation de journaux sur la machine hôte.

Affichage des journaux du démon Docker

Si vous souhaitez plutôt afficher les journaux spécifiques au service Docker global sur votre serveur, et non à une application conteneurisée spécifique, vous souhaiterez afficher le journalctl journaux :

sudo journalctl -fu docker.service

C'est là qu'il est stocké sur la plupart des systèmes, mais à un endroit différent sur certains :

  • 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. Commande pour nettoyer les anciens fichiers journaux ?

  2. Où Wine stocke-t-il les fichiers ?

  3. Fichiers journaux Linux

  4. Comment changer le chemin du journal d'audit dans MySQL Docker

  5. Où trouver les fichiers journaux de connexion SSH sur centos

Où sont stockés les images et les conteneurs Docker sur l'hôte ?

Comment centraliser la gestion des journaux avec Graylog à l'aide de Docker

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Gardez vos images Docker gérables avec Docker Image Prune

Comment copier des fichiers entre l'hôte et le conteneur Docker

Comment accéder aux fichiers en dehors d'un conteneur Docker