Comment utiliser la commande docker compose logs pour afficher 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 logs pour visualiser la sortie de vos conteneurs Docker. Nous commencerons par comprendre comment afficher les journaux de base d'un conteneur en cours d'exécution.

Ensuite, vous explorerez comment suivre les journaux des conteneurs en temps réel, ce qui est crucial pour le monitoring et le débogage des processus actifs. Enfin, vous apprendrez à améliorer votre expérience de visualisation des journaux en incluant des horodatages, en spécifiant le nombre de lignes à afficher depuis la fin des journaux et en filtrant les journaux selon une plage horaire.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555082{{"Comment utiliser la commande docker compose logs pour afficher la sortie des conteneurs"}} docker/logs -.-> lab-555082{{"Comment utiliser la commande docker compose logs pour afficher la sortie des conteneurs"}} docker/pull -.-> lab-555082{{"Comment utiliser la commande docker compose logs pour afficher la sortie des conteneurs"}} docker/images -.-> lab-555082{{"Comment utiliser la commande docker compose logs pour afficher la sortie des conteneurs"}} end

Démarrer les services et afficher les journaux de base

Dans cette étape, nous allons apprendre à démarrer un conteneur Docker et à afficher ses journaux de base. Les journaux sont essentiels pour comprendre ce qui se passe à l'intérieur d'un conteneur, déboguer des problèmes et surveiller son comportement.

Commencez par télécharger une image Nginx simple depuis Docker Hub. Cette image sera utilisée pour exécuter un conteneur de serveur web.

docker pull nginx:latest

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement. Une fois le téléchargement terminé, vous pouvez vérifier que l'image est disponible localement en listant les images :

docker images

Maintenant, lançons un conteneur basé sur l'image Nginx. Nous l'exécuterons en mode détaché (-d) pour qu'il tourne en arrière-plan, et nous le nommerons my-nginx.

docker run -d --name my-nginx nginx

La sortie de cette commande sera l'ID du conteneur. Cela signifie que le conteneur a démarré avec succès en arrière-plan.

Pour voir les journaux de base générés par le conteneur my-nginx, nous utilisons la commande docker logs suivie du nom ou de l'ID du conteneur.

docker logs my-nginx

Vous verrez les flux de sortie standard et d'erreur standard du processus Nginx s'exécutant dans le conteneur. Ces journaux incluent généralement des informations sur le démarrage du serveur Nginx et la gestion des requêtes.

Suivre les journaux en temps réel

Dans l'étape précédente, nous avons visualisé les journaux d'un conteneur après son démarrage. Cependant, il est parfois nécessaire de voir les journaux au fur et à mesure de leur génération, en temps réel. Cela est particulièrement utile pour le débogage ou le monitoring de processus actifs.

Pour suivre les journaux d'un conteneur en temps réel, nous utilisons la commande docker logs avec l'option -f (ou --follow). Cela maintiendra le terminal ouvert et affichera les nouvelles entrées de journaux au moment où elles apparaissent.

Suivons les journaux de notre conteneur my-nginx :

docker logs -f my-nginx

La commande commencera par afficher les journaux actuels puis attendra les nouvelles entrées. Comme notre conteneur Nginx fonctionne mais ne traite pas activement de requêtes, vous ne verrez peut-être pas de nouveaux journaux immédiatement.

Pour générer de nouvelles entrées de journaux, nous pouvons envoyer une requête au serveur web Nginx s'exécutant dans le conteneur. Par défaut, Nginx écoute sur le port 80. Bien que nous n'ayons pas mappé le port vers l'hôte dans la commande docker run, nous pouvons toujours accéder au réseau interne du conteneur depuis l'hôte en utilisant curl.

Ouvrez un nouvel onglet de terminal dans l'environnement LabEx. Dans ce nouvel onglet, exécutez la commande suivante pour envoyer une requête au conteneur Nginx :

curl http://localhost:80

Vous devriez voir le code HTML de la page d'accueil par défaut de Nginx s'afficher dans le nouvel onglet de terminal.

Maintenant, revenez à l'onglet de terminal où vous suivez les journaux (docker logs -f my-nginx). Vous devriez voir apparaître de nouvelles entrées de journaux, indiquant que Nginx a traité la requête de curl. Ces entrées incluent généralement des informations sur l'IP du client, la méthode de requête, le chemin demandé et le code de statut HTTP.

Pour arrêter le suivi des journaux, appuyez sur Ctrl+C dans le terminal où docker logs -f est en cours d'exécution.

Afficher les journaux avec horodatages et sélection spécifique

Dans les étapes précédentes, nous avons visualisé les journaux de base et suivi les journaux en temps réel. Cependant, la sortie basique de docker logs n'inclut pas d'horodatages, ce qui peut rendre difficile la corrélation des événements ou la compréhension de la chronologie des entrées de journal. De plus, il est parfois nécessaire de ne voir que les entrées de journal les plus récentes.

Pour inclure des horodatages dans la sortie des journaux, nous utilisons l'option -t (ou --timestamps) avec la commande docker logs.

Visualisons les journaux de notre conteneur my-nginx avec horodatages :

docker logs -t my-nginx

Vous verrez maintenant un horodatage ajouté à chaque entrée de journal, indiquant quand cette entrée a été générée par le conteneur. Ceci est très utile pour le débogage et l'analyse.

Parfois, vous n'êtes intéressé que par les entrées de journal les plus récentes, comme avec la commande tail sous Linux. La commande docker logs fournit l'option --tail à cet effet. Vous pouvez spécifier le nombre de lignes que vous souhaitez voir depuis la fin des journaux.

Par exemple, pour afficher uniquement les 5 dernières entrées de journal du conteneur my-nginx :

docker logs --tail 5 my-nginx

Cette commande affichera uniquement les 5 dernières lignes des journaux du conteneur. Vous pouvez combiner --tail avec -t pour voir les dernières entrées avec leurs horodatages.

docker logs -t --tail 5 my-nginx

Cette commande affichera les 5 dernières entrées de journal, chacune avec son horodatage correspondant.

Filtrer les journaux par plage horaire

En plus de visualiser tous les journaux ou les plus récents, vous pouvez également filtrer les journaux des conteneurs selon une plage horaire spécifique. Cette fonctionnalité est utile lorsque vous enquêtez sur des événements survenus pendant une période particulière.

La commande docker logs propose les options --since et --until pour filtrer les journaux en fonction du temps. Ces options acceptent différents formats de temps, notamment les horodatages RFC3339, les horodatages Unix ou des durées relatives (par exemple 10m pour 10 minutes, 1h pour 1 heure).

Essayons de filtrer les journaux. Tout d'abord, nous devons générer des journaux à différents moments. Pour cela, nous pouvons envoyer à nouveau des requêtes curl au conteneur Nginx.

Ouvrez un nouvel onglet de terminal et exécutez plusieurs fois la commande curl avec un court délai entre chaque requête.

curl http://localhost:80
sleep 5
curl http://localhost:80
sleep 5
curl http://localhost:80

Maintenant, visualisons les journaux du conteneur my-nginx avec horodatages pour voir les moments de ces requêtes.

docker logs -t my-nginx

Observez les horodatages des entrées de journal générées par les commandes curl.

Pour filtrer les journaux depuis un moment spécifique, utilisez l'option --since. Par exemple, pour voir les journaux générés dans la dernière minute :

docker logs --since 1m my-nginx

Cette commande affichera toutes les entrées de journal du conteneur my-nginx générées dans la dernière minute.

Vous pouvez aussi filtrer les journaux jusqu'à un moment spécifique avec l'option --until. Par exemple, pour voir les journaux générés il y a plus d'une minute :

docker logs --until 1m my-nginx

Cette commande affichera toutes les entrées de journal du conteneur my-nginx générées il y a plus d'une minute.

Vous pouvez combiner --since et --until pour visualiser les journaux dans une fenêtre temporelle précise. Par exemple, pour voir les journaux entre il y a 5 minutes et il y a 1 minute :

docker logs --since 5m --until 1m my-nginx

Notez que le résultat exact dépendra du moment où vous avez exécuté les commandes curl et des commandes docker logs.

Résumé

Dans ce lab, nous avons appris les étapes fondamentales pour utiliser la commande docker logs afin de visualiser la sortie des conteneurs. Nous avons commencé par télécharger une image Docker et exécuter un conteneur en mode détaché. Ensuite, nous avons exploré comment afficher les journaux de base générés par le conteneur en cours d'exécution, ce qui permet d'obtenir des informations sur son démarrage et son activité.

De plus, nous avons approfondi notre compréhension en apprenant à suivre les journaux des conteneurs en temps réel à l'aide de l'option -f, permettant une surveillance continue des flux de journaux au fur et à mesure de leur génération. Cette fonctionnalité de journalisation en temps réel est essentielle pour le débogage et l'observation du comportement dynamique des conteneurs.