Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker container logs pour visualiser la sortie générée par vos conteneurs Docker. Nous commencerons par exécuter un conteneur simple produisant des logs, puis nous explorerons l'utilisation basique de docker logs pour récupérer cette sortie.

Vous découvrirez ensuite comment enrichir la sortie des logs en y incluant des horodatages (timestamps) et des informations détaillées. Enfin, nous aborderons comment filtrer les logs en fonction du temps, vous permettant d'afficher les logs depuis un point spécifique ou de suivre la sortie en temps réel (tail), ainsi que de visualiser les logs jusqu'à un moment précis. Ce lab offre une expérience pratique avec des techniques essentielles de journalisation Docker pour surveiller et déboguer vos applications conteneurisées.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555112{{"Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs"}} docker/stop -.-> lab-555112{{"Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs"}} docker/rm -.-> lab-555112{{"Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs"}} docker/logs -.-> lab-555112{{"Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs"}} docker/pull -.-> lab-555112{{"Comment utiliser la commande docker container logs pour visualiser la sortie des conteneurs"}} end

Exécuter un conteneur générant des logs

Dans cette étape, nous allons apprendre à exécuter un conteneur Docker qui génère des logs. Les logs sont essentiels pour déboguer et surveiller les applications s'exécutant dans des conteneurs. Nous utiliserons une simple image hello-world à cet effet, car elle affiche un message puis se termine, ce qui constitue un bon point de départ pour observer le journalisation (logging) basique des conteneurs.

Tout d'abord, récupérons l'image hello-world depuis Docker Hub. Cela garantit que l'image est disponible localement avant de tenter d'exécuter un conteneur.

docker pull hello-world

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Maintenant, exécutons un conteneur utilisant l'image hello-world. La commande docker run crée et démarre un nouveau conteneur. Par défaut, Docker capture la sortie standard (stdout) et l'erreur standard (stderr) du processus du conteneur et les stocke sous forme de logs.

docker run hello-world

Lorsque vous exécutez cette commande, le conteneur hello-world s'exécutera, affichera un message dans votre terminal, puis se terminera. Ce message est la sortie que Docker capture comme logs.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Bien que la sortie s'affiche directement dans votre terminal lors de l'exécution d'un conteneur simple comme hello-world, pour des conteneurs s'exécutant en arrière-plan ou des applications plus complexes, vous devrez utiliser la commande docker logs pour visualiser leur sortie. Nous explorerons la commande docker logs dans les prochaines étapes.

Visualiser les logs de base d'un conteneur

Dans l'étape précédente, nous avons exécuté un conteneur hello-world qui affichait un message dans la console avant de se terminer. Bien que cela ait été utile pour une démonstration rapide, les applications réelles s'exécutent souvent en continu en arrière-plan. Pour visualiser la sortie (logs) de ces conteneurs, nous utilisons la commande docker logs.

Commençons par exécuter un conteneur qui reste actif et génère des sorties. Nous utiliserons une simple image ubuntu et exécuterons une commande qui affiche un message toutes les quelques secondes. Nous lancerons ce conteneur en mode détaché (-d) pour qu'il s'exécute en arrière-plan. Nous lui attribuons également un nom (my-logging-container) pour faciliter son identification.

docker pull ubuntu
docker run -d --name my-logging-container ubuntu /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done'

La commande docker pull ubuntu télécharge l'image Ubuntu. La commande docker run démarre un nouveau conteneur nommé my-logging-container en mode détaché. La commande exécutée à l'intérieur du conteneur est /bin/bash -c 'while true; do echo "Hello from the container at $(date)"; sleep 5; done', un simple script shell qui affiche un message avec la date et l'heure actuelles toutes les 5 secondes.

Vous verrez un ID de conteneur s'afficher dans votre console, indiquant que le conteneur a démarré en arrière-plan.

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
sha256:...

Maintenant que notre conteneur s'exécute et génère des logs, nous pouvons les visualiser en utilisant la commande docker logs suivie du nom ou de l'ID du conteneur.

docker logs my-logging-container

Cette commande affichera tous les logs générés par my-logging-container depuis son démarrage. Vous devriez voir une série de messages "Hello from the container..." avec des horodatages.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
...

La commande docker logs est un outil fondamental pour inspecter la sortie de vos conteneurs, ce qui est crucial pour comprendre leur comportement et diagnostiquer des problèmes.

Visualiser les logs avec horodatages et détails

Dans l'étape précédente, nous avons visualisé les logs de base d'un conteneur en cours d'exécution. Bien que la sortie soit utile, elle manque souvent de contexte, comme l'heure à laquelle chaque entrée de log a été générée. Docker propose des options pour inclure des horodatages et d'autres détails avec les logs.

Pour visualiser les logs avec horodatages, nous pouvons utiliser le drapeau -t ou --timestamps avec la commande docker logs. Cela ajoutera un horodatage au début de chaque entrée de log, indiquant quand elle a été écrite dans la sortie standard ou l'erreur standard du conteneur.

Visualisons les logs de notre my-logging-container avec horodatages :

docker logs -t my-logging-container

Vous verrez maintenant les logs avec un horodatage au début de chaque ligne. Les horodatages sont au format RFC3339Nano (par exemple 2023-10-27T10:30:00.123456789Z).

2023-10-27T10:30:00.123456789Z Hello from the container at ...
2023-10-27T10:30:05.123456789Z Hello from the container at ...
2023-10-27T10:30:10.123456789Z Hello from the container at ...
...

L'inclusion d'horodatages est cruciale pour analyser les logs, en particulier lorsqu'il s'agit de comprendre la séquence d'événements ou d'identifier quand un problème spécifique s'est produit.

Une autre option utile est le drapeau -f ou --follow, qui permet de diffuser les logs en temps réel. Cela est similaire à l'utilisation de la commande tail -f sur un fichier de log. Essayons cela avec notre conteneur :

docker logs -f my-logging-container

Cette commande affichera les logs existants puis continuera à montrer les nouvelles entrées de log au fur et à mesure qu'elles sont générées par le conteneur. Vous verrez apparaître de nouveaux messages "Hello from the container..." toutes les 5 secondes.

Pour arrêter de suivre les logs, appuyez sur Ctrl+C.

Combiner les drapeaux -t et -f est une pratique courante pour surveiller les logs des conteneurs en temps réel avec horodatages :

docker logs -tf my-logging-container

Cela fournit une vue en direct de la sortie du conteneur, facilitant l'observation de son comportement et le débogage des problèmes au moment où ils se produisent.

Visualiser les logs depuis une heure spécifique ou afficher uniquement les dernières entrées

Dans cette étape, nous allons explorer comment visualiser les logs d'un conteneur générés après une heure spécifique ou afficher uniquement les entrées de log les plus récentes. Cela est particulièrement utile lorsqu'on travaille avec des conteneurs qui fonctionnent depuis longtemps et ont généré un grand volume de logs.

Pour visualiser les logs générés depuis une heure spécifique, vous pouvez utiliser le drapeau --since. La valeur pour --since peut être un horodatage (comme ceux que nous avons vus avec le drapeau -t) ou une durée relative (par exemple 10m pour 10 minutes, 1h pour 1 heure).

Attendons quelques secondes pour permettre à notre my-logging-container de générer d'autres logs. Ensuite, nous visualiserons les logs générés durant les 30 dernières secondes.

sleep 30
docker logs --since 30s my-logging-container

Cette commande affichera uniquement les entrées de log générées dans les 30 dernières secondes. Le résultat sera similaire aux logs complets, mais n'inclura que les entrées récentes.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
... (uniquement les logs des 30 dernières secondes)

Une autre demande courante est de visualiser uniquement les dernières lignes des logs, comme avec la commande tail. Vous pouvez y parvenir en utilisant le drapeau --tail, suivi du nombre de lignes que vous souhaitez voir.

Visualisons les 5 dernières lignes des logs de notre conteneur :

docker logs --tail 5 my-logging-container

Cette commande affichera uniquement les 5 entrées de log les plus récentes du conteneur.

Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ...
Hello from the container at ... (les 5 dernières lignes)

Vous pouvez combiner --since et --tail avec d'autres drapeaux comme -t et -f pour obtenir des vues plus spécifiques de vos logs de conteneur. Par exemple, pour visualiser les 10 dernières lignes avec horodatages :

docker logs -t --tail 10 my-logging-container

Ces options offrent des moyens puissants de filtrer et visualiser les logs des conteneurs, facilitant ainsi la recherche rapide des informations dont vous avez besoin.

Visualiser les logs jusqu'à une heure spécifique

En plus de visualiser les logs depuis une heure spécifique, vous pouvez également consulter les logs générés jusqu'à une heure donnée en utilisant le drapeau --until. Cette fonctionnalité est utile pour examiner les logs jusqu'à un moment précis, par exemple avant qu'un problème ne survienne.

La valeur pour --until peut également être un horodatage ou une durée relative.

Attendons à nouveau quelques secondes pour garantir la génération de logs supplémentaires.

sleep 10

Maintenant, visualisons les logs de notre my-logging-container qui ont été générés jusqu'à il y a 10 secondes.

docker logs --until 10s my-logging-container

Cette commande affichera toutes les entrées de log depuis le démarrage du conteneur jusqu'à environ 10 secondes avant l'exécution de la commande. Vous verrez les entrées de log initiales, mais les plus récentes seront exclues.

Hello from the container at ...
Hello from the container at ...
... (logs jusqu'à il y a 10 secondes)

Vous pouvez combiner --since et --until pour visualiser les logs dans une plage horaire spécifique. Par exemple, pour voir les logs générés entre il y a 2 minutes et il y a 30 secondes :

docker logs --since 2m --until 30s my-logging-container

Cette commande n'affichera que les entrées de log correspondant à cette fenêtre temporelle précise.

Enfin, pour nettoyer le conteneur en cours d'exécution, vous pouvez l'arrêter et le supprimer.

docker stop my-logging-container
docker rm my-logging-container

La commande docker stop envoie un signal d'arrêt au conteneur, et docker rm supprime le conteneur.

Savoir filtrer les logs par période est une compétence essentielle pour déboguer et analyser le comportement de vos conteneurs Docker.

Résumé

Dans ce lab, nous avons appris à visualiser les logs des conteneurs en utilisant la commande docker logs. Nous avons commencé par exécuter un simple conteneur hello-world pour comprendre comment Docker capture la sortie standard sous forme de logs.

Nous avons ensuite exploré l'utilisation basique de docker logs pour récupérer la sortie d'un conteneur. Nous avons également appris comment enrichir l'affichage des logs en y incluant des horodatages et des informations détaillées, ainsi que comment filtrer les logs par période - en visualisant les logs depuis une heure spécifique ou jusqu'à une heure donnée, et comment afficher en continu les dernières entrées de log.