Tout d'abord, j'utilise docker 1.1.2 pour le client et le serveur, cette réponse peut être obsolète pour les nouvelles versions de docker car le docker évolue rapidement.
Emplacement du fichier
Trouvez votre répertoire docker. Sur les systèmes qui utilisent le système de style apt / debian, le package installé par le référentiel docker https://get.docker.com/ubuntu
utilise /var/lib/docker
. Les chances sont que le répertoire se trouve au même endroit sur d'autres systèmes (ne peut pas confirmer).
sous containers/**CONTAINER_ID**
vous trouverez des informations sur le conteneur. Dans le fichier **CONTAINER_ID**-json.log
de ce dossier, vous trouverez un fichier avec tous les journaux de ce conteneur. Cela peut ressembler à un fichier json, ce n'est pas le cas. C'est un flux que json structure, un par ligne, contenant chacun une ligne de journal (chaque ligne se termine par un }
et la suivante commence par un {
, donc ce n'est pas un json valide dans son ensemble).
Exemple d'emplacement: - /var/lib/docker/containers/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6-json.log
Modification / modification de ce fichier
Je vous suggère d'utiliser ce chemin pour voir si c'est la raison pour laquelle vous manquez d'espace, mais pas pour les enregistrer.
Je préfère m'assurer que le conteneur ne consigne pas trop de lignes (en utilisant un CMD dans le dockerfile qui redirige la sortie de votre processus vers un fichier dans un volume ou vers / dev / null - avec les journaux activés avec la configuration - et Je voudrais ensuite logrotate les fichiers journaux avec un autre conteneur)
docker inspect
est votre ami.docker inspect --format='{{.LogPath}}' $INSTANCE_ID
docker-machine
Voici un simple liner pour nettoyer le fichier journal du conteneur:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
la source
docker-machine ssh default "echo '' | sudo tee $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)"
docker logs
est toujours vide ...docker inspect --format='{{.LogPath}}' <container_name_or_id>
été utile. Merci!si vous exécutez
sudo lsof | grep '(deleted)'
, vous constaterez peut-être qu'il y a beaucoup de fichiers journaux de conteneurs supprimés laissés ouverts par dockerCe sont des journaux qui appartiennent à un conteneur supprimé. Une façon de les fermer est de redémarrer le démon docker lui-même. Ce n'est pas toujours faisable.
Une autre façon de libérer cet espace est de trouver le descripteur de fichier approprié et de le tronquer:
Où
17511
est le pid de docker ete49d81fc
fait partie de l'ID du nom de fichier / conteneur incriminé. Ici, le fd est / proc / 17511 / fd / 25, donc nous le tronquons:la source
: > /proc/17511/fd/25
J'utilise Docker version 1.13.0, build 49bf474
Si vous utilisez le format de journalisation par défaut
json-file
, vous pouvez spécifier l'option de rotation de vos journaux.Vous pouvez configurer le démon docker pour ce faire ou le configurer par conteneur.
Par exemple, une taille de fichier journal de 2 Mo et un maximum de 5 fichiers journaux:
Démon Docker: Créer un fichier
/etc/docker/daemon.json
:Docker run:
Pour plus de détails, voir la journalisation et la configuration de dockerd
la source
Une réponse tardive, mais n'importe qui dans le même bateau pourrait être mieux d'explorer les options pour exporter leurs journaux de docker vers un endroit raisonnable pour les gérer. logspout est utile pour collecter les journaux de tous vos conteneurs Docker et les envoyer quelque part. SI vous avez juste besoin de considérer cela, alors les envoyer au démon syslog de l'hôte peut être une bonne approche, et vous pouvez utiliser les mécanismes habituels pour les organiser dans des fichiers et les faire pivoter à partir de là. Pour les environnements multi-hôtes plus importants, vous pouvez envisager la livraison vers une pile "ELK". à savoir Elasticsearch, Logstash et Kibana.
la source
Pour trouver l'emplacement du docker, vous pouvez utiliser:
Si vous souhaitez libérer de l'espace, vous pouvez procéder de la manière suivante:
Vous pouvez maintenant supprimer un conteneur avec:
la source
Vu ce script dans la documentation officielle de docker:
Fonctionne bien, mais docker ne libère pas la mémoire automatiquement ... Le script supprime simplement les fichiers journaux.
la source