Docker Run avec des journaux – Capture et débogage de la sortie
Les journaux sont un aspect inestimable du dépannage et du débogage des conteneurs Docker. Lors de l’exécution d’applications dans Docker, la capture efficace des journaux permet aux développeurs de diagnostiquer les problèmes plus rapidement et de les résoudre efficacement. Dans cet article, nous allons explorer différentes méthodes de capture et d’analyse des journaux des conteneurs Docker afin d’obtenir des informations sur leur comportement et de résoudre les problèmes qui surviennent.
Dans ce tutoriel, vous allez apprendre :
- Comment utiliser la commande docker logs pour capturer la sortie
- Bonnes pratiques pour la journalisation dans les conteneurs Docker
- Comment analyser les journaux à des fins de débogage
Configuration logicielle requise et conventions de ligne de commande Linux
Capture et analyse des journaux à partir de Docker
COMPRENDRE LES JOURNAUX DOCKER
Docker capture la sortie (stdout et stderr) de vos conteneurs, qui sont accessibles à l’aide de commandes pour aider à déboguer les problèmes.
Cette section vous fournira des instructions étape par étape sur la façon de capturer et d’analyser les journaux lors de l’exécution de conteneurs Docker. Une gestion efficace des journaux est essentielle pour identifier et résoudre rapidement les problèmes.
Instructions étape par étape
Exécuter un conteneur Docker en mode détaché : démarrez un conteneur en arrière-plan tout en exposant les ports nécessaires.
docker run -d --name linuxconfig -p 8888:80 httpdAfficher les journaux du conteneur : accédez aux journaux de votre conteneur en cours d’exécution pour surveiller sa sortie.
docker logs linuxconfigCette commande affiche tous les journaux générés par le conteneur depuis son démarrage.
Suivez les journaux en temps réel : surveillez en permanence les journaux au fur et à mesure qu’ils sont générés.
docker logs -f linuxconfig
Ici, httpd est l’image du serveur HTTP Apache, linuxconfig est le nom attribué au conteneur et le port 8888 sur l’hôte est mappé au port 80 dans le conteneur. L’option -d exécute le conteneur en mode détaché.
L’option -f (ou --follow) maintient la commande en cours d’exécution et affiche les nouvelles entrées de journal au fur et à mesure qu’elles se produisent, de la même manière que si vous utilisiez tail -f sur un fichier journal.
Exemples de commandes Docker Logs
Docker offre de puissantes fonctionnalités de journalisation qui aident les développeurs à résoudre les problèmes et à surveiller le comportement des conteneurs. Les exemples suivants illustrent diverses techniques de capture, de filtrage et d’analyse des journaux de conteneurs. Des commandes de base aux configurations avancées, ces exemples couvrent un large éventail de scénarios pour vous aider à déboguer efficacement vos applications conteneurisées.
Récupération de base des journaux : obtenez tous les journaux d’un conteneur.
docker logs linuxconfigSurveillance des journaux en temps réel : suivez les journaux au fur et à mesure qu’ils sont générés.
docker logs --follow linuxconfigLimitation de la sortie des journaux : récupérez uniquement les journaux les plus récents.
docker logs --tail=50 linuxconfigAffichage des journaux avec des horodatages : affichez les journaux avec des informations temporelles.
docker logs --timestamps linuxconfigChaque ligne de journal est préfixée par son horodatage pour un meilleur suivi des événements.
Capture des journaux limités dans le temps : obtenez les journaux dans un délai spécifique.
docker logs --since="2023-03-15T10:00:00" --until="2023-03-15T11:00:00" linuxconfigFiltrage temporel relatif : affichez les journaux des dernières minutes ou heures.
docker logs --since=30m linuxconfigEnregistrement des journaux dans un fichier : redirigez les journaux vers un fichier pour une analyse plus approfondie.
docker logs linuxconfig > container_logs.txt 2>&1Enregistre tous les journaux de conteneur dans un fichier texte qui peut être partagé ou analysé avec d’autres outils.
Filtrage des journaux avec grep : recherchez des modèles spécifiques dans les journaux.
docker logs linuxconfig 2>&1 | grep ERRORSurveillance de plusieurs conteneurs : utilisez Docker Compose pour afficher les journaux d’une pile de services.
docker-compose logs -fDébogage avancé avec des pilotes de journal : configurez un conteneur pour utiliser un pilote de journalisation spécifique.
docker run -d --name debug-container --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginxAfficher les journaux d’un conteneur arrêté
docker logs my_old_containerUtiliser le pilote de journalisation JSON (lors du démarrage du conteneur)
docker run -d --name jsonlogger --log-driver=json-file httpdUtiliser un pilote de journalisation personnalisé (par exemple, syslog)
docker run -d --name syslogger --log-driver=syslog httpdInspecter les paramètres du pilote de journal
docker inspect --format='{{.HostConfig.LogConfig.Type}}' linuxconfigRenvoie le pilote de journal actuellement utilisé par le conteneur.
Analyse des événements de conteneur : suivez les événements du cycle de vie du conteneur.
docker events --filter container=linuxconfig
Cela montre tous les journaux générés depuis le début de l’exécution du conteneur.
Affiche les journaux et continue à diffuser la nouvelle sortie jusqu’à ce que vous appuyiez sur Ctrl+C.
N’affiche que les 50 dernières lignes de logs, ce qui est utile pour les conteneurs contenant des logs volumineux.
Affiche uniquement les journaux générés au cours de la période spécifiée.
Affiche les journaux des 30 dernières minutes. Vous pouvez utiliser s (secondes), m (minutes), h (heures) ou d (jours).
N’affiche que les lignes de journal contenant le mot « ERREUR », ce qui facilite l’identification des problèmes.
Lorsque vous utilisez plusieurs conteneurs définis dans un fichier Docker Compose, cette commande affiche les journaux de tous les services.
Utilise le pilote de fichier JSON avec des paramètres de rotation, limitant les fichiers journaux à 10 Mo et conservant un maximum de 3 fichiers.
Docker conserve les journaux même si le conteneur s’est arrêté, à moins qu’il ne soit supprimé.
Utilise le pilote de journal par défaut 'json-file' ; Les journaux peuvent être inspectés à l’aide des journaux Docker.
Utile pour l’envoi de logs à des systèmes centralisés (Syslog, Fluentd, etc.).
Affiche les événements liés au conteneur, tels que les démarrages, les arrêts ou les modifications de l’état d’intégrité.
BONNES PRATIQUES
Envisagez d’utiliser une solution de journalisation centralisée ou un pilote de journalisation. Docker prend en charge plusieurs pilotes de journalisation, notamment json-file et fluentd, qui peuvent aider à agréger les journaux pour faciliter les requêtes.
Conclusion
La capture et l’analyse cohérentes des journaux des conteneurs Docker sont essentielles pour un débogage et une résolution des problèmes efficaces. En tirant parti des capacités de journalisation natives de Docker, vous pouvez obtenir des informations précieuses sur le comportement de vos applications et maintenir des opérations efficaces.
N’oubliez pas d’explorer des outils ou des frameworks supplémentaires qui améliorent l’efficacité de la journalisation, tels que l’intégration de la pile Fluentd ou ELK.
Foire aux questions (FAQ)
Puis-je conserver les journaux même si un conteneur redémarre ?
Oui, l’utilisation de pilotes de journalisation tels que json-file peut aider à conserver les journaux, en les rendant disponibles après le redémarrage du conteneur.
Quels sont les formats de journaux pris en charge par Docker ?
Docker utilise principalement le format JSON pour les journaux, mais prend en charge divers pilotes de journalisation qui peuvent prendre en charge différents formats, tels que syslog ou journald.
Comment puis-je afficher les journaux de tous les conteneurs en même temps ?
Utilisez
$docker logs $ (docker ps -q)pour récupérer les journaux de tous les conteneurs en cours d’exécution si vous souhaitez les analyser collectivement.Puis-je filtrer les journaux par mots-clés spécifiques ?
Oui, vous pouvez utiliser grep avec la commande logs pour filtrer les informations pertinentes. Par exemple,
$docker logs my_container | grep « ERROR ».




