Wie entferne ich alle Docker-Volumes?


91

Wenn ich a mache docker volume ls, sieht meine Liste der Volumes folgendermaßen aus:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

und ich möchte alle meine Volumes auf einmal entfernen. Wie kann ich es tun?

Antworten:


187

Der offizielle Befehl zum Entfernen aller nicht verwendeten Daten (einschließlich Volumes ohne Container) wird mit Docker 1.13 ausgeführt

docker system prune  

Wenn Sie sich nur auf Volumes beschränken möchten, entfernen Sie nur nicht verwendete Volumes :

docker volume prune

Sie haben docker image pruneauch docker container pruneusw .:
Weitere Informationen finden Sie unter " Nicht verwendete Docker-Objekte bereinigen ".

Siehe Commit 86de7c0 und PR 26108 .

Sie können es in Aktion auf play-with-docker.com sehen :

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare

/ # docker system  prune
WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35

Die aktuelle (Pre-Docker 1.13) Art der Volumenverwaltung wurde mit PR 14242 und dem docker volumeBefehl eingeführt , der in seinem Kommentar vom Juli 2015 dokumentiert :

docker volume rm $(docker volume ls -q --filter dangling=true)

Das ist großartig, danke. Ich wusste nichts über die neuen pruneBefehle.
Baumgesicht

3
Die Prune-Befehle sind großartig, aber seien Sie vorsichtig mit ihnen. Es scheint, als würden sie davon ausgehen, dass Container zum Zeitpunkt Ihres Aufrufs ausgeführt werden. Es werden Dinge gelöscht, die möglicherweise verbunden sind, aber nicht aktiv verwendet werden (z. B. Netzwerke), was beim nächsten Start vorhandener Container zu Fehlern führt. Verwenden Sie die danglingFilter im
Voraus,

docker system prunescheint lokale Volumes nicht zu entfernen, sondern docker volume prunesortiert sie aus
Maciek Rek

23

Bearbeitet am 2017: Diese Antwort wurde am 16. April 16 gegeben und ist jetzt veraltet und nur für die Docker-Version vor 1.13 korrekt. Bitte verwenden Sie die Antwort von @VonC, jetzt ist sie als korrekt markiert

Um nicht verwendete Volumes zu löschen, können Sie den integrierten Docker- volume rmBefehl verwenden. Der rmBefehl löscht auch alle Verzeichnisse, in /var/lib/docker/volumesdenen es sich nicht um ein Volume handelt. Stellen Sie daher sicher, dass Sie dort nichts gespeichert haben, das Sie speichern möchten:
Befehl zum Auflisten von Volumes, etwas besser als Ihres:

$ docker volume ls -qf dangling=true

Aufräumen:

$ docker volume rm $(docker volume ls -qf dangling=true)

Weitere Details zu ls hier , zu rm hier


1
Ich würde es nicht ausführen, ohne zuerst die Liste der baumelnden Volumes mit --dry-runParameter zu testen .
Sergei Rodionov

Es gibt keine --dry-runOption.
Harald Albers

1
Diese Antwort ist diejenige, wenn Sie alle Volumes löschen möchten, egal was passiert. Vielen Dank!
Mücahit Yılmaz

5

Folgendes habe ich als nützlich empfunden : https://github.com/chadoe/docker-cleanup-volumes

Shellscript zum Löschen verwaister Docker-Volumes in / var / lib / docker / volume und / var / lib / docker / vfs / dir Docker Version 1.4.1 bis 1.11.x.

Grundsätzlich werden verwaiste / baumelnde Volumes bereinigt, es enthält --dry-runjedoch auch einige Docker-Befehle (auf die im vorherigen Kommentar verwiesen wird).

Hinweis zu Docker 1.9 und höher

Um verwaiste Volumes in Docker 1.9 und höher zu löschen, können Sie anstelle dieses Docker-Cleanup-Volumes-Skripts auch die integrierten Docker-Volume-Befehle verwenden. Der integrierte Befehl löscht auch alle Verzeichnisse in / var / lib / docker / volume, die kein Volume sind. Stellen Sie daher sicher, dass Sie nichts dort abgelegt haben, was Sie speichern möchten:

Aufführen:

$ docker volume ls -qf dangling=true

Aufräumen:

$ docker volume rm $(docker volume ls -qf dangling=true)

Oder besser mit einem No-Op umgehen, aber Linux-spezifisch:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm

3

Um die Frage zu beantworten und von Marc zu leihen, funktioniert dies:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.