comment nettoyer le répertoire Docker overlay?
je dirige docker via CoreOS et L'ECS D'AWS. J'ai eu une image défaillante qui a été redémarrée plusieurs fois, et les conteneurs sont toujours autour - ils rempli ma cloison de commande. Plus précisément, /var/lib/docker/overlay/
contient un grand nombre de fichiers/répertoires.
je sais que menu fixe-nettoyage-volumes est une chose, mais elle nettoie le répertoire / volumes, pas le répertoire / overlay.
docker ps -a
montre plus de 250 essais de démarrage sur mon mauvais conteneur docker. Ils ne sont pas en cours d'exécution, bien.
mis à part <!-Comment puis-je / devrais-je nettoyer ça?
8 réponses
voilà comment je fais ça en ce moment. Je ne vais pas l'accepter comme une réponse parce que j'espère qu'il y a un meilleur moyen.
# delete old docker processes
docker rm `docker ps -a | grep Exited | awk '{print }'`
ignore_errors: true
# delete old images. will complain about still-in-use images.
docker rmi `docker images -aq`
à Partir de notre côté, nous avons utilisé:
sudo docker system prune -a -f
Qui me sauvent 3Go !
sudo docker rm -v $(sudo docker ps -a -q -f status=exited)
sudo docker rmi -f $(sudo docker images -f "dangling=true" -q)
docker volume ls -qf dangling=true | xargs -r docker volume rm
Nous mettre sur cron pour gérer un peu plus efficacement notre espace disque.
Cheers
Référence: https://forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604/4
nous venons juste de commencer à avoir ce problème, et la réponse de btafarelo m'a obtenu une partie du chemin, ou au moins m'a fait me sentir mieux au sujet de supprimer les entrées sha256.
info Système: EC2 instances exécutant CoreOS 1.12 derrière un ELB
- Vidanger le docker instance de l'ELB
Arrêt docker
systemctl stop docker rm -rf /var/lib/docker/overlay/*
Executer les résultats des commandes
for d in $(find /var/lib/docker/image/overlay -type d -name '*sha256*'); do echo rm -rf $d/* ; done
Redémarrage (plus facile ) manière de tout ramener jusqu')
cela a récupéré environ 25% du disque après le redémarrage des services sans aucun effet de côté.
j'ai ajouté ceci à bashrc dans mon environnement dev, et je me suis habitué à le faire fonctionner tous les jours.
function cleanup_docker() {
docker ps -f status=exited -q | xargs -r docker rm
docker images -f dangling=true -q | xargs -r docker rmi
}
dans certains cas, le script suivant peut libérer plus d'espace, car il essaiera de supprimer toutes les images, et échouera simplement en silence:
function cleanup_docker_aggressive() {
for i in $(docker images --no-trunc -q | sort -u)
do
docker rmi $i 2> /dev/null
done
}
malheureusement, ils ne sont pas beaucoup plus propres que votre solution.
EDIT: à partir de Docker 2017.09, vous pouvez remplacer ces deux - là par juste
docker container prune
docker image prune -a
le dernier que vous pouvez utiliser avec fantaisie filtres comme --filter "until=24h"
docker ps
-- quiet
--
--filter status=quitté
panneau rm
- -- force
panneau des images
- -- quiet
- --
- --filtre balançant=true
menu fixe rmi
- -- force
Votre hacky façon est bien.
docker rm `docker ps -a | grep Exited | awk '{print }'`
Mon hacky moyen est
docker rm $(docker ps --all | awk '/ago/{print }')
une façon légèrement plus propre est de courir docker ps
--quiet
(-q) drapeau, pour obtenir le numéro d'identification et --filter status=exited
--filtrer l'a quitté.
docker rm $(docker ps --filter status=exited --quiet) # remove stopped docker processes
exécuter docker rm
--force
(-f), le drapeau et l' docker ps
--all
(-a) drapeau pour arrêter même la course ceux
docker rm --force $(docker ps --all --quiet) # remove all docker processes
ce qui prend probablement tout cet espace disque après plusieurs compilations ratées, ce sont les images. Pour conserver l'espace disque sur l'hôte docker, supprimez périodiquement les images inutilisées avec
docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images
ou obtenir plus agressif, vous pouvez --force
(-f) pour nettoyer --all
(-a) les images
docker rmi --force $(docker images --all --quiet) # clean all possible docker images
la façon de@analytik de le mettre dans un .bashrc la fonction semble comme une pratique idée
function cleanup_docker() {
docker rm --force $(docker ps --all --quiet) # remove all docker processes
docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images
}
et si vous avez l'habitude de générer beaucoup de docker images que vous n'avez pas besoin, ajouter .bash_logout
Docker la collecte des ordures peut se faire facilement en utilisant un autre conteneur docker https://github.com/spotify/docker-gc
Vous pourriez le faire fonctionner comme un cron à l'aide de https://github.com/flaccid/docker-docker-gc-crond
vous devez inspecter vos images/conteneurs et supprimer les dossiers dans /opt / docker / overlay qui n'a pas été trouvé dans l'exécution d'inspect
docker inspect $(docker ps -qa) | grep -oE '[a-f0-9]{64}' >> inspect-hashs.txt
docker inspect $(docker images -qa) | grep -oE '[a-f0-9]{64}' >> inspect-hashs.txt
sudo ls -l /var/lib/docker/overlay > overlays.txt
diff -u inspect-hashs.txt overlays.txt | grep -E '^\+' | grep -oE '[a-f0-9]{64}' | xargs sudo rm -rf /opt/docker/overlay/
voici la résolution pour nettoyer le répertoire de superposition docker de https://lebkowski.name/docker-volumes/
docker images --no-trunc | grep '<none>' | awk '{ print }' | xargs -r docker rmi
docker ps --filter status=dead --filter status=exited -aq | xargs docker rm -v
pour Docker < 1.9 :
find '/var/lib/docker/volumes/' -mindepth 1 -maxdepth 1 -type d | grep -vFf <(docker ps -aq | xargs docker inspect | jq -r '.[]|.Mounts|.[]|.Name|select(.)')
Ou pour Docker >=1.9 :
docker volume ls -qf dangling=true | xargs -r docker volume rm