137 votes

Comment supprimer tous les volumes Docker ?

Si je fais un docker volume ls ma liste de volumes est la suivante :

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

et je veux supprimer tous mes volumes en une seule fois. Comment puis-je le faire ?

276voto

VonC Points 414372

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 voulez vous limiter aux seuls volumes, supprimer uniquement les volumes inutilisés :

docker volume prune

Vous avez également docker image prune , docker container prune etc :
Voir plus à " Supprimer les objets Docker inutilisés ".

Ver commettre 86de7c0 y PR 26108 .

Vous pouvez le voir en action dans 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 manière actuelle (pré-docker 1.13) de gérer le volume a été introduite avec PR 14242 et le docker volume commande qui documente dans son commentaire à partir de juillet 2015 :

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

0 votes

C'est génial, merci. Je ne savais pas pour le nouveau prune des commandes.

3 votes

Les commandes de pruneaux sont excellentes, mais il faut faire attention avec elles. Il semble qu'elles supposent que les conteneurs sont en cours d'exécution au moment où vous les appelez. Elles purgeront les éléments qui pourraient être associés mais qui ne sont pas activement utilisés (par exemple, les réseaux), ce qui entraînera des échecs au prochain démarrage des conteneurs existants. Utilisez le dangling filtrez à l'avance si vous n'êtes pas sûr de ce qui pourrait être élagué :)

5 votes

docker system prune ne semble pas supprimer les volumes locaux mais docker volume prune fait le tri

35voto

vvchik Points 585

Modifié en 2017 : Cette réponse a été donnée le 16 avr 16 et est maintenant dépassée, et correcte uniquement pour la version de docker antérieure à 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 fonction intégrée de docker volume rm commandement. Le site rm La commande supprime également tout répertoire dans /var/lib/docker/volumes qui n'est pas un volume, donc assurez-vous que vous n'avez rien mis là-dedans que vous voulez sauvegarder :
Commande des volumes de la liste, un peu plus à droite que la vôtre :

$ docker volume ls -qf dangling=true

Nettoyage :

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

plus de détails sur ls aquí , sur rm aquí

1 votes

Je ne l'exécuterais pas sans tester la liste des volumes en suspens avec --dry-run d'abord.

0 votes

Il n'y a pas --dry-run option.

2 votes

Cette réponse est la bonne si vous voulez supprimer tous les volumes, peu importe lesquels. merci !

8voto

Marc Young Points 2197

Voici ce que j'ai trouvé d'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 jusqu'à 1.11.x

Il fait essentiellement un nettoyage de tous les volumes orphelins ou enchevêtrés, mais il comprend un --dry-run mais il prend note de certaines commandes incluses dans Docker (qui sont référencées dans le commentaire précédent).

Note sur Docker 1.9 et plus

Pour supprimer les volumes orphelins dans Docker 1.9 et plus, vous pouvez également utiliser les commandes de volume intégrées de docker au lieu de ce docker-cleanup-volumes script. La commande intégrée supprime également tout répertoire dans /var/lib/docker/volumes qui n'est pas un volume, donc assurez-vous que vous n'avez pas mis quelque chose là-dedans que vous voulez sauver :

Liste :

$ docker volume ls -qf dangling=true

Nettoyage :

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

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

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

8voto

Jonathan Lin Points 2498

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X