> **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 logs` sert à 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-a2d89b0bab03} [[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. ![Docker container log file example](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2\. Les logs s'accumulent\-ils et risquent\-ils de saturer l'espace disque ? {#sec-aaee2d48212f} 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` {#sec-890442ea3ac0} 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-file` est la valeur par défaut. * **`options`** : Définit les options à passer au pilote. * **`max-size`** : Identique à `--log-opt max-size` de la commande `docker run`. * **`max-file`** : Identique à `--log-opt max-file` de la commande `docker 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-ba6417698933} 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)**. 1. Ouvrez ou créez le fichier `/etc/docker/daemon.json`. (Créez-le s'il n'existe pas.) 2. Ajoutez le contenu suivant : ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3. Redémarrez le démon Docker. ```bash 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 `logging` du fichier `docker-compose.yml`. * **Configuration par défaut globale** : Pour appliquer une politique uniforme à tous les conteneurs du serveur, modifiez le fichier `/etc/docker/daemon.json`.