In der offiziellen Docker-Dokumentation wird erwähnt, dass ich ausführen muss docker rm -v containername, um ein Datenvolumen gezielt zu entfernen. Aber was tun Sie, wenn Sie bereits alle Container entfernt haben, die auf das jeweilige Datenvolumen verweisen?
Vor Version 1.9 bot Docker keine Möglichkeit zum Entfernen von baumelnden Volumes.
Wenn solche Volumes zu viel Speicherplatz beanspruchen und Sie die Dinge selbst in die Hand nehmen möchten, können Sie die Volumes manuell löschen, indem Sie zuerst die verwendeten Volumes identifizieren. Sie können ausführen docker inspect -f '{{ .Volumes }}' containername, um den Speicherort der verwendeten Volumes im Dateisystem zu ermitteln, und dann alles außer diesen löschen. Wenn Sie viele Container haben, können Sie for x in $(docker ps -qa | sed '1d'); do docker inspect -f '{{ .Volumes }}' ${x}; donedie Container durchlaufen und die Volumes auflisten.
Noch besser wäre es, können Sie den Python - Skript verwenden , hier ist die Voraussetzung , um das Python - API - Client für Docker installierenpip install docker-py
danke Daniel, es ist seltsam, dass nicht viele Dokumentationen oder Sites, die Docker-Volumes abdecken, die richtige Docker-Rm-V-Methode zum Entfernen der Volumes erwähnen, nur um die Volumes einzurichten. Ihre Informationen sind wertvoll, danke!
p4guru
Eigentlich habe ich bis heute das gleiche Problem, es scheint genau die gleiche Liste in einer anderen Reihenfolge anzuzeigen, kann jemand bestätigen, dass dies tatsächlich richtig funktioniert und ohne Schaden an vorhandenen und aktiven Containern verwendet werden kann?
Killstreet
Warum beinhaltet Ihr Befehl | sed '1d'? Es wirft das erste Ergebnis weg. Die -qOption in entfernt docker ps -qabereits die Kopfzeile in der Ausgabe. Ich benutze Docker Version 1.13 und dort muss ich {{ .Mounts }}statt verwenden {{ .Volumes }}.
NZD
66
In Docker 1.9 gibt es die Möglichkeit, Volumes besser zu verwalten docker volume(siehe diese PR ):
$ docker --version
Docker version 1.9.0, build 76d6bc9
$ docker volume
Usage: docker volume [OPTIONS] [COMMAND]
Manage Docker volumes
Commands:
create Create a volume
inspect Return low-level information on a volume
ls List volumes
rm Remove a volume
Run 'docker volume COMMAND --help' for more information on a command
--help=false Print usage
$ docker volume ls -f dangling=true
DRIVER VOLUME NAME
local 0490a79a769b8fc96b901ad2b92be9f34516476be5d06da766b4fd8636275330
local source
local 89ecc5c7afc0c004b2eccff55692b842b4394ba12048195b385334ec7b161857
local 382a7ea81dd87f773914725d755ffe28110c3f07da5f135d6181bf55b393070a
local 0eef9492e7bf3f4e62fd1195b7284b32dd6f22ac8c99052f6ccf890c3d7a4e3c
local 499d1da8e35ebd51a2217c2ca68272740a6ae85a3d2e29e9abf54163d12f5c56
local da1cb72a3a39991b11992a8d5dbc3167771fb54b8eb41308657151ba934b981f
local 4530c88973639c6a4d6c35e9ee4a0ec48dcdd5767fa377214b4a32644ecb8947
local 784d941d6e1c7a89a064f9bbe3f594520174029efcbb792b3285915653801f0f
local 0250901593eecd6321a937fe321e5f88996716035ae51fa60952dcc1c5b8f884
local 92aa72c8a82facc0164f88b7216b2699dd4d393f7364ba5b8fd92e217c305d7e
local b88b70a407cd97cd5dfd0d93860ea620293abfe9090d2237cb88363846bfe8d3
local 5206cdf191052df750f6b37e37ce55455a03f6afcc6bfb03c46c8d1c87d5791f
local 88c510defbfc90a98026a88cca556725e60a15ac2ab579084664fa03b529670d
local d2538cf892e0f75f37e458e6240b7e31600f93d1fb40eb0190eba669f81e3b12
local e3d3cad4f814edd582b0dad2bfe069f9c69d9cc60b71e32a56690295269cac6e
local 120f36311a4f27497b7b89f22b1e0b7ace2c5e72f23cc1b869c895c37b4ed2db
local 42b8c7587137d493aac0388487ba745b077d27fb4f05f1d3f892246fef9f82f1
local 53dba9646ab87392c5c82768efb6b72a51de26564f0db2cacb790a3dccf846d2
Ich habe herausgefunden, dass das Auflisten von Volumes mit dangling=falsegenau denselben Volumes für mich in einer anderen Reihenfolge erfolgt. Docker 1.9.1. Klingt faul; Funktioniert dieser Dangling-Filter wirklich? Ah, das ist ein Fehler. github.com/docker/docker/issues/16095 (als geschlossen markiert, aber immer noch ein Problem für mich ...)
gertvdijk
17
Bereinigungsbefehle: Ab Docker 1.13 werden Bereinigungsbefehle eingeführt. So entfernen Sie alle nicht verwendeten Container, Bilder, Netzwerke und Volumes:
Die Python-Version hat bei mir nicht funktioniert, es gab ein Problem mit der Docker-Version. 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 ()' in die .bashrc-Datei Ihres Stammverzeichnisses ein. Diese Funktion muss als root ausgeführt werden.
| sed '1d'
? Es wirft das erste Ergebnis weg. Die-q
Option in entferntdocker ps -qa
bereits die Kopfzeile in der Ausgabe. Ich benutze Docker Version 1.13 und dort muss ich{{ .Mounts }}
statt verwenden{{ .Volumes }}
.In Docker 1.9 gibt es die Möglichkeit, Volumes besser zu verwalten
docker volume
(siehe diese PR ):Diese können mit diesem Befehl entfernt werden:
quelle
dangling=false
genau denselben Volumes für mich in einer anderen Reihenfolge erfolgt. Docker 1.9.1. Klingt faul; Funktioniert dieser Dangling-Filter wirklich? Ah, das ist ein Fehler. github.com/docker/docker/issues/16095 (als geschlossen markiert, aber immer noch ein Problem für mich ...)Bereinigungsbefehle: Ab Docker 1.13 werden Bereinigungsbefehle eingeführt. So entfernen Sie alle nicht verwendeten Container, Bilder, Netzwerke und Volumes:
docker system prune
oder einzeln:
docker container prune
docker image prune
docker network prune
docker volume prune
quelle
Befehl verwenden
um baumelnde Volumes von Docker 1.9 und höher zu löschen.
quelle
Ich habe Docker 1.6.
Die Python-Version hat bei mir nicht funktioniert, es gab ein Problem mit der Docker-Version. Es ist erstaunlich, dass in Zeiten wie diesen nichts besser ist als die gute alte Art, Dinge zu tun.
Fügen Sie einfach die Funktionsdeklaration 'volpurge ()' in die .bashrc-Datei Ihres Stammverzeichnisses ein. Diese Funktion muss als root ausgeführt werden.
quelle