Comment effacer les enregistrements des conteneurs Docker en cours d’exécution

Accueil » Comment effacer les enregistrements des conteneurs Docker en cours d’exécution

Les conteneurs Docker de longue durée peuvent rapidement accumuler un grand nombre de lignes de journal. Ceux-ci consomment de la capacité de stockage et réduisent les performances en accédant et en filtrant les données. Alors que Docker inclut des outils intégrés pour afficher les journaux, il n’existe aucun mécanisme intégré pour les nettoyer.

Dans cet article, vous apprendrez à effacer les journaux des conteneurs Docker en cours d’exécution, sans les redémarrer ni les remplacer. Vous découvrirez également certaines techniques permettant de gérer plus efficacement des enregistrements volumineux tout en conservant les anciennes données.

comprendre le problème

Docker collecte les journaux de la sortie standard et les flux d’erreurs des processus de premier plan du conteneur. Les docker logs La commande est utilisée pour récupérer ces enregistrements, mais elle ne permet pas de supprimer les anciennes lignes.

Docker prend en charge de nombreux pilotes de registre différents, il n’est donc pas possible de fournir un mécanisme de nettoyage standardisé. Cet article se concentre sur la norme json-file log handler, où les lignes de journal sont stockées dans un fichier JSON sur le système de fichiers hôte de votre conteneur. Consultez la documentation de votre contrôleur de stockage si vous devez nettoyer les journaux transmis à un hôte distant.

Les fichiers journaux créés par le json-file contrôleur sont stockés sous le /var/lib/docker/containers annuaire. Chaque conteneur obtient son propre fichier journal qui est utilisé tout au long de sa durée de vie. Il n’y a pas de rotation des journaux configurée par défaut.

La simple suppression du fichier journal n’est pas une solution efficace. Docker s’attend à ce que le fichier soit disponible en permanence et ne le recréera pas automatiquement s’il est supprimé. C’est plus sûr Bien sûr le contenu du registre existant pour éviter d’affecter les écritures en cours.

Lire aussi  Que veut dire "ratio" sur les réseaux sociaux ?

Découvrez le chemin du fichier journal

Recherchez d’abord le chemin d’accès au fichier journal de votre conteneur cible. Vous pouvez récupérer le chemin du fichier journal pour un conteneur appelé my-app en exécutant la commande suivante :

$ docker inspect --format="{{.LogPath}}" my-app
/var/lib/containers/1380d936...-json.log

Effacer le fichier journal

Vous pouvez effacer le contenu du journal sans le supprimer en renvoyant une chaîne vide dans son contenu. Le fichier appartiendra à root vous devrez donc effectuer cette opération dans un shell root. La commande suivante videra le fichier journal pour vous :

$ sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'

L’interpolation Shell est utilisée pour récupérer dynamiquement le chemin du fichier journal pour le my-app récipient. Au lieu de cela, vous pouvez remplacer manuellement le chemin précédemment récupéré.

quand tu cours docker logs my-appvous verrez maintenant une sortie vide à moins que le conteneur n’ait repris l’écriture de lignes entre-temps.

Limitation de la sortie du journal

Les docker logs La commande accepte certains arguments qui peuvent être utilisés pour limiter la sortie de journaux bruyants. Ceux-ci permettent d’atténuer le besoin de nettoyer le registre et d’éviter que votre terminal ne soit inondé d’anciennes lignes chaque fois que vous accédez au fichier.

  • --tail – Cet indicateur indique à Docker de n’émettre qu’un nombre spécifique d’anciennes lignes de journal, en commençant par la plus récente.
  • --until Oui --since – Ces drapeaux limitent la sortie aux lignes de journal émises pendant une période de temps spécifique. Ils sont utiles lorsque vous connaissez la période approximative pendant laquelle un événement s’est produit.

Voici quelques exemples:

Afficher les 100 lignes de journal les plus récentes

docker logs my-app --tail 100

Afficher les lignes de journal écrites au cours de la dernière heure

docker logs my-app --since 1h

Affiche jusqu’à 100 lignes de journal écrites au cours de la dernière heure

Lire aussi  Cet ordinateur portable de jeu Wicked-Fast de 17 pouces peut être à vous pour moins de 2 000 $ [SPONSORED]

docker logs my-app --tail 100 --since 1h

Paramètres de rotation des journaux

Le fait de devoir nettoyer régulièrement les fichiers journaux de cette manière indique généralement que vos journaux d’application sont excessivement verbeux ou qu’il y a tout simplement trop d’activité à stocker dans un seul fichier.

De nombreux pilotes de registre Docker, y compris json-filea une prise en charge facultative de la rotation des journaux que vous pouvez activer globalement pour le démon Docker ou par conteneur.

Les paramètres du démon sont configurés dans /etc/docker/daemon.json. Il s’agit d’un exemple qui fait pivoter les journaux du conteneur une fois qu’ils atteignent 8 Mo. Jusqu’à cinq fichiers seront conservés à tout moment, les anciens fichiers étant automatiquement supprimés au fur et à mesure que de nouvelles rotations se produisent.

{
    "log-opts": {
        "max-size": "8m",
        "max-file": "5"
    }
}

Redémarrez le démon Docker pour appliquer la modification :

$ sudo service docker restart

La rotation au niveau du démon s’applique à tous les conteneurs nouvellement créés. Les modifications n’affecteront pas les conteneurs qui existent déjà sur votre hôte.

La rotation peut être définie pour des conteneurs individuels à l’aide de --log-opts flags Ceux-ci remplaceront les paramètres par défaut du démon Docker.

docker run --name app 
    --log-driver json-file 
    --log-opts max-size=8M 
    --log-opts max-file=5 
    app-image:latest

résumé

Les journaux de conteneur Docker peuvent devenir bruyants lorsque des applications occupées écrivent une sortie importante. L’accès aux journaux détaillés est utile pour le débogage, mais ils consomment de l’espace de stockage, rendent la sélection des données difficile et peuvent ralentir les performances.

Vous pouvez nettoyer les fichiers journaux à la demande en utilisant des commandes shell pour vider leur contenu. Cependant, il est recommandé de configurer la rotation des journaux pour qu’elle se produise automatiquement une fois que les fichiers atteignent une taille spécifiée. Les docker logs La commande prend également en charge les indicateurs qui peuvent aider à contrôler les journaux lourds sur le point d’accès.