Comment supprimer tous les volumes de docker?

91

Si je fais un docker volume ls, ma liste de volumes est comme ceci:

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

et je veux supprimer tous mes volumes à la fois. Comment puis-je le faire?

Avara
la source

Réponses:

188

La commande officielle pour supprimer toutes les données inutilisées (y compris les volumes sans conteneurs) sera avec docker 1.13

docker system prune  

Si vous souhaitez limiter aux volumes seuls, en supprimant uniquement les volumes inutilisés :

docker volume prune

Vous avez également docker image prune, docker container pruneetc:
Voir plus à « objets Pruneau Docker inutilisés ».

Voir commit 86de7c0 et PR 26108 .

Vous pouvez le voir en action sur play-with-docker.com :

/ # 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

La façon actuelle (pré-docker 1.13) de gérer le volume a été introduite avec PR 14242 et la docker volumecommande , qui documente dans son commentaire de juillet 2015:

docker volume rm $(docker volume ls -q --filter dangling=true)
VonC
la source
C'est génial, merci. Je ne connaissais pas les nouvelles prunecommandes.
treeface
3
Les commandes de taille sont excellentes, mais soyez prudent avec elles. Il semble qu'ils supposent que les conteneurs sont en cours d'exécution au moment où vous les appelez. Cela purgera les éléments qui pourraient être associés mais qui ne sont pas utilisés activement (par exemple les réseaux), ce qui entraînera des pannes au prochain démarrage des conteneurs existants. Utilisez les danglingfiltres à l'avance si vous n'êtes pas sûr de ce qui pourrait être taillé :)
jocull
docker system prunene semble pas supprimer les volumes locaux mais le docker volume prunetrie
Maciek Rek
23

Modifié le 2017: Cette réponse a été donnée le 16 avril 16 et est maintenant obsolète, et correcte uniquement pour la version de docker antérieure à la 1.13, veuillez utiliser la réponse de @VonC, maintenant elle est marquée comme correcte

Pour supprimer les volumes inutilisés, vous pouvez utiliser la volume rmcommande docker intégrée . La rmcommande supprime également tout répertoire /var/lib/docker/volumesqui n'est pas un volume, alors assurez-vous que vous n'avez rien mis là-dedans que vous voulez enregistrer:
Commande pour lister les volumes, un peu juste que le vôtre:

$ docker volume ls -qf dangling=true

Nettoyer:

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

plus de détails sur les ls ici , sur rm ici

vvchik
la source
1
Je ne l'exécuterais pas sans tester d'abord la liste des volumes suspendus avec le --dry-runparamètre.
Sergei Rodionov
Il n'y a pas d' --dry-runoption.
Harald Albers
1
cette réponse est celle si vous souhaitez supprimer tous les volumes quoi qu'il arrive. Merci!
Mücahit Yılmaz
5

Voici ce que j'ai trouvé utile: https://github.com/chadoe/docker-cleanup-volumes

Shellscript pour supprimer les volumes docker orphelins dans / var / lib / docker / volumes et / var / lib / docker / vfs / dir Docker version 1.4.1 à 1.11.x

Il effectue essentiellement un nettoyage de tous les volumes orphelins / suspendus, mais il inclut un --dry-runmais il prend également note de certaines commandes incluses dans le menu fixe (qui sont référencées dans le commentaire précédent)

Remarque sur Docker 1.9 et versions ultérieures

Pour supprimer des volumes orphelins dans Docker 1.9 et versions ultérieures, vous pouvez également utiliser les commandes de volume docker intégrées au lieu de ce script docker-cleanup-volumes. La commande intégrée supprime également tout répertoire dans / var / lib / docker / volumes qui n'est pas un volume, alors assurez-vous que vous n'avez rien mis là-dedans que vous souhaitez enregistrer:

Liste:

$ docker volume ls -qf dangling=true

Nettoyer:

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

Ou, gérer un no-op mieux mais spécifique à Linux:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm
Marc Young
la source
3

Pour répondre à la question et emprunter à Marc, cela fonctionne:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Jonathan Lin
la source