Résumé en 3 points
- Les logs de console des conteneurs Docker sont enregistrés sous forme de fichiers sur le disque de l'hôte, et non en mémoire système.
- La commande
docker logssert à lire ces fichiers enregistrés pour les afficher.- Pour éviter que les fichiers de logs ne grossissent indéfiniment, il est crucial de configurer les options de rotation des logs (
max-size,max-file).
1. Où et comment les logs sont-ils stockés ? {#sec-37c2a29cff35}
Docker capture les flux de sortie standard (stdout) et d'erreur standard (stderr) des conteneurs, et les traite via un pilote de logging (Logging Driver). Si aucune configuration spécifique n'est définie, Docker utilise par défaut le pilote de logging json-file.
- Emplacement de stockage : Les logs des conteneurs sont stockés sous forme de fichiers JSON dans un chemin spécifique sur le système hôte. Généralement, le chemin est le suivant :
/var/lib/docker/containers/[컨테이너_ID]/[컨테이너_ID]-json.log
- Commande
docker logs: Cette commande n'affiche pas le contenu de la mémoire, mais lit en fait les fichiers de logs JSON mentionnés ci-dessus pour les afficher dans le terminal.

2. Les logs s'accumulent-ils et risquent-ils de saturer l'espace disque ? {#sec-4e6257ec2aba}
Oui, c'est exact. Sans aucune intervention, les fichiers de logs peuvent continuer de grossir et finir par occuper tout l'espace disque de l'hôte. Pour éviter cela, Docker propose des options de rotation des logs (Log Rotation) qui limitent la taille et le nombre de fichiers de logs.
Par exemple, vous pouvez ajouter les options suivantes lors de l'exécution de la commande docker run :
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
--log-opt max-size=10m: Limite la taille maximale d'un fichier de log à 10 Mo.--log-opt max-file=3: Limite le nombre maximal de fichiers de logs à 3. Si ce nombre est dépassé, le fichier le plus ancien est supprimé.
Avec cette configuration, les logs de ce conteneur n'utiliseront qu'un maximum de 30 Mo (10 Mo * 3 fichiers) d'espace disque.
3. Configuration dans le fichier docker-compose.yml
Avec Docker Compose, il est très facile de configurer les options de logging pour chaque service directement dans le fichier docker-compose.yml.
Imaginez que les drapeaux --log-opt de la commande docker run soient intégrés sous forme YAML.
Voici un exemple d'application de la rotation des logs pour un service nommé my-app :
services:
my-app:
image: your-app-image
# ... Autres configurations ...
deploy:
resources:
limits:
memory: 512M
# 👇 Cette section est dédiée à la configuration des logs.
logging:
driver: "json-file" # Pilote de logging à utiliser (peut être omis car c'est la valeur par défaut)
options:
max-size: "10m" # Taille maximale par fichier : 10 Mo
max-file: "3" # Nombre maximal de fichiers : 3
logging: Cette clé marque le début de la configuration de logging pour le service concerné.driver: Spécifie le pilote de logging à utiliser.json-fileest la valeur par défaut.options: Définit les options à passer au pilote.max-size: Identique à--log-opt max-sizede la commandedocker run.max-file: Identique à--log-opt max-filede la commandedocker run.
Désormais, lorsque vous démarrerez ce service avec docker-compose up, les logs du conteneur my-app seront automatiquement soumis à rotation et n'utiliseront qu'un maximum de 30 Mo (10 Mo * 3 fichiers) d'espace disque.
4. Définir des valeurs par défaut pour tous les conteneurs {#sec-1a0729e53c34}
Si vous trouvez fastidieux de spécifier les options pour chaque conteneur et que vous souhaitez appliquer une politique par défaut à l'ensemble du système, la meilleure approche est de modifier le fichier de configuration du démon Docker (Daemon).
- Ouvrez ou créez le fichier
/etc/docker/daemon.json. (Créez-le s'il n'existe pas.) - Ajoutez le contenu suivant :
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Redémarrez le démon Docker.
sudo systemctl restart docker
Avec cette configuration, tous les conteneurs créés à l'avenir suivront automatiquement cette politique, sauf si une configuration de logging différente est spécifiée. Bien entendu, si vous définissez d'autres options de logging pour un conteneur spécifique via un fichier docker-compose.yml ou la commande docker run, les paramètres individuels prévaudront sur la configuration du démon.
- Configuration par service individuel : La configuration la plus courante et la plus pratique se fait dans la section
loggingdu fichierdocker-compose.yml. - Configuration par défaut globale : Pour appliquer une politique uniforme à tous les conteneurs du serveur, modifiez le fichier
/etc/docker/daemon.json.