Ich arbeite Docker über CoreOS und AWS ECS. Ich hatte ein fehlerhaftes Image, das viele Male neu gestartet wurde, und die Container sind immer noch in der Nähe. Sie füllten meine Festplattenpartition. Insbesondere enthält /var/lib/docker/overlay/
eine große Anzahl von Dateien/Verzeichnissen.
Ich weiß, dass Docker-Cleanup-Volumes eine Sache ist, aber es reinigt das Verzeichnis/Volumes, nicht das Verzeichnis/overlay.
docker ps -a
zeigt über 250 Startversuche für meinen fehlerhaften Docker-Container. Sie laufen aber nicht.
Abgesehen von rm -rf /var/lib/docker/overlay/*
, wie kann/soll ich das bereinigen?
Von unserer Seite verwendeten wir:
Sudo docker system Prune -a -f
Was rettet mich 3Go!
Wir verwenden auch die berühmten Befehle:
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
Wir haben das auf cron gesetzt, um unseren Speicherplatz etwas effizienter zu verwalten.
Prost
Referenz: https://forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604/4
Hier ist die harte Art, wie ich das jetzt mache. Ich werde es nicht als Antwort akzeptieren, weil ich hoffe, dass es einen besseren Weg gibt.
# delete old docker processes
docker rm `docker ps -a | grep Exited | awk '{print $1 }'`
ignore_errors: true
# delete old images. will complain about still-in-use images.
docker rmi `docker images -aq`
Ich habe dies zu bashrc in meiner Entwicklungsumgebung hinzugefügt und habe mich daran gewöhnt, es jeden Tag oder so zu betreiben.
function cleanup_docker() {
docker ps -f status=exited -q | xargs -r docker rm
docker images -f dangling=true -q | xargs -r docker rmi
}
In einigen Fällen kann das folgende Skript mehr Speicherplatz freigeben, da versucht wird, alle Bilder zu entfernen, und es wird nur stummgeschaltet:
function cleanup_docker_aggressive() {
for i in $(docker images --no-trunc -q | sort -u)
do
docker rmi $i 2> /dev/null
done
}
Leider sind sie nicht wesentlich sauberer als Ihre Lösung.
BEARBEITEN: Ab Docker 1.13 können Sie das Dockersystem verwenden:
docker system df # to check what is using space
docker system Prune # cleans up also networks, build cache, etc
BEARBEITEN: Ab Docker 2017.09 können Sie auch container und image verwenden.
docker container Prune
docker image Prune -a
letzteres können Sie mit ausgefallenen Filtern wie --filter "until=24h"
verwenden.
Wir haben gerade angefangen, dieses Problem zu haben, und die Antwort von btafarelo brachte mich zum Teil oder brachte mich zumindest dazu, die sha256-Einträge zu entfernen.
Systeminfo: ec2-Instanzen, die CoreOS 1.12 hinter einer ELB ausführen
Docker herunterfahren
systemctl stop docker
rm -rf /var/lib/docker/overlay/*
Führen Sie die Ergebnisse der Befehle aus
for d in $(find /var/lib/docker/image/overlay -type d -name '*sha256*'); do echo rm -rf $d/* ; done
neustart (einfachste Möglichkeit, alles wieder hochzubringen)
Nach dem Neustart der Dienste ohne schädliche Nebenwirkungen waren etwa 25% der Festplatte wiederhergestellt.
docker ps
--ruhig
--alles
--filter status = beendet
docker rm
docker-Bilder
docker rmi
Dein gehackter Weg ist gut.
docker rm `docker ps -a | grep Exited | awk '{print $1 }'`
Mein gehackter Weg ist
docker rm $(docker ps --all | awk '/ago/{print $1}')
Eine etwas sauberere Methode ist, docker ps
mit dem Flag --quiet
(-q) auszuführen, um nur die ID-Nummer zu erhalten und --filter status=exited
, um nur die verlassenen zu filtern.
docker rm $(docker ps --filter status=exited --quiet) # remove stopped docker processes
oder docker rm
mit dem Flag --force
(-f) und docker ps
mit dem Code --all
(-a) ausführen, um auch die laufenden zu beenden
docker rm --force $(docker ps --all --quiet) # remove all docker processes
Nach mehreren fehlgeschlagenen Builds benötigen die Images wahrscheinlich den gesamten Speicherplatz. Um Speicherplatz auf dem Docker-Host zu sparen, entfernen Sie nicht verwendete Docker-Images regelmäßig mit
docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images
um aggressiver zu werden, können Sie --force
(-f) verwenden, um --all
(-a) Bilder zu bereinigen
docker rmi --force $(docker images --all --quiet) # clean all possible docker images
@analytiks Art und Weise, es in eine .bashrc -Funktion zu setzen, scheint eine praktische Idee zu sein
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
}
wenn Sie die Gewohnheit haben, viele Docker-Images zu generieren, die Sie nicht benötigen, fügen Sie sie zu .bash_logout hinzu.
Die Docker-Garbage Collection kann auf einfache Weise mit einem anderen Docker-Container durchgeführt werden https://github.com/spotify/docker-gc
Sie könnten es als cron ausführen, indem Sie https://github.com/flaccid/docker-docker-gc-crond verwenden.
Sie müssen Ihre Bilder/Container überprüfen und die Ordner in/opt/docker/overlay entfernen, die bei der Ausführung von inspect nicht gefunden wurden
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/
hier ist die Auflösung, um das Docker-Overlay-Verzeichnis von https://lebkowski.name/docker-volumes/ zu löschen.
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi
docker ps --filter status=dead --filter status=exited -aq | xargs docker rm -v
für 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(.)')
Oder für Docker> = 1.9:
docker volume ls -qf dangling=true | xargs -r docker volume rm