In der offiziellen Docker-Dokumentation wird erwähnt, dass ich ausführen muss docker rm -v containername
um ein Datenvolume gezielt zu entfernen. Aber was tun Sie, wenn Sie bereits alle Container entfernt haben, die auf das spezifische Datenvolumen verweisen?
Vor Version 1.9 bot Docker keine Möglichkeit, baumelnde Volumes zu entfernen.
Wenn solche Volumes zu viel Speicherplatz beanspruchen und Sie die Sache selbst in die Hand nehmen möchten, können Sie die Volumes manuell löschen, indem Sie zuerst die verwendeten Volumes identifizieren. Du kannst rennen docker inspect -f '{{ .Volumes }}' containername
um den Speicherort im Dateisystem der verwendeten Volumes zu finden und dann alles außer diesen zu löschen. Wenn Sie viele Container haben, können Sie ausführen for x in $(docker ps -qa | sed '1d'); do docker inspect -f '{{ .Volumes }}' ${x}; done
um die Container zu durchlaufen und die Volumes aufzulisten.
Besser noch, Sie können das Python-Skript verwenden hier, die Voraussetzung ist, den Python-API-Client für Docker zu installieren pip install docker-py
Aufräumbefehle: Ab Docker 1.13 werden Aufräumbefehle eingeführt. So entfernen Sie alle nicht verwendeten Container, Images, Netzwerke und Volumes:
docker system prune
oder individuell:
docker container prune
docker image prune
docker network prune
docker volume prune
Befehl verwenden
docker volume ls -qf dangling=true | xargs -r docker volume rm
um baumelnde Volumes von Docker 1.9 und höher zu löschen.
Ich habe Docker 1.6.
Die Python-Version hat bei mir nicht funktioniert, es hat sich über eine Nichtübereinstimmung der Docker-Version beschwert. Es ist erstaunlich, dass in Zeiten wie diesen nichts besser ist als die gute alte Art, Dinge zu tun.
volpurge() { if [ $(id -u) -ne 0 ];then echo "please run as root" return 1 fi BASEDIR=/var/lib/docker/vfs/dir a=$(mktemp) b=$(mktemp) c=$(mktemp) printf "checking docker volumes ... " cd $BASEDIR ls -1 | sort -u > $a cd - tot1=$(wc -l < $a) echo "found $tot1 total" printf "inspecting volumes used by existing containers ... " for x in $(docker ps -qa | sed '1d');do docker inspect -f '{{ .Volumes }}' ${x} | tr ' ' '\n' | cut -d':' -f2 | tr -d ']' | grep $BASEDIR >> $b done sed -i 's/\/var\/lib\/docker\/vfs\/dir\///g' $b sort -u $b > $c mv -f $c $b tot2=$(wc -l < $b) echo "found $tot2 total" if [ "$tot1" -gt "$tot2" ];then comm -3 $a $b > $c tot3=$(wc -l < $c) echo "purging $tot3 dangling volumes ... " read -p "proceed? [y/n]" decision if [ "$decision" = "y" ];then while read d;do printf "." rm -rf ${BASEDIR}/$d done < $c else echo "OK. Please examine this manually" cat $c fi else echo "nothing to purge" fi rm -f $a $b $c}
Fügen Sie einfach die Funktionsdeklaration 'volpurge ()' zu Ihrem Stammverzeichnis hinzu.bashrc-Datei. Diese Funktion muss als root ausgeführt werden.