Como remover todos os volumes do docker?

91

Se eu fizer um docker volume ls, minha lista de volumes será assim:

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

e quero remover todos os meus volumes de uma vez. Como eu posso fazer isso?

Avara
fonte

Respostas:

188

O comando oficial para remover todos os dados não utilizados (incluindo volumes sem contêineres) será com docker 1.13

docker system prune  

Se você deseja limitar apenas os volumes, removendo apenas os volumes não utilizados :

docker volume prune

Você também tem docker image prune, docker container pruneetc:
Veja mais em " Eliminar objetos Docker não usados ".

Consulte commit 86de7c0 e PR 26108 .

Você pode vê-lo em ação em 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

A forma atual (pré-docker 1.13) de gerenciar o volume foi introduzida com o PR 14242 e o docker volumecomando , que documenta em seu comentário de julho de 2015:

docker volume rm $(docker volume ls -q --filter dangling=true)
VonC
fonte
Isso é ótimo, obrigado. Eu não sabia sobre os novos prunecomandos.
treeface de
3
Os comandos de poda são ótimos, mas tome cuidado com eles. Parece que eles presumem que os contêineres estão em execução no momento em que você os chama. Ele irá limpar coisas que podem estar associadas, mas não estão em uso ativamente (por exemplo, redes), levando a falhas na próxima vez que os contêineres existentes forem iniciados. Use os danglingfiltros com antecedência se não tiver certeza do que pode ser
removido
docker system prunenão parece para remover volumes locais, mas docker volume pruneclassifica-o para fora
Maciek Rek
23

Editado em 2017: Esta resposta foi dada em 16 de abril de 16 e agora está desatualizada e correta apenas para a versão docker anterior a 1.13, use a resposta de @VonC, agora ela está marcada como correta

Para excluir volumes não usados, você pode usar o volume rmcomando docker integrado . O rmcomando também exclui qualquer diretório /var/lib/docker/volumesque não seja um volume, portanto, certifique-se de não colocar nada lá que deseja salvar:
Comando para listar volumes, um pouco corretos que os seus:

$ docker volume ls -qf dangling=true

Limpar:

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

mais detalhes sobre ls aqui , sobre rm aqui

vvchik
fonte
1
Eu não o executaria sem antes testar a lista de volumes pendentes com --dry-runparâmetro.
Sergei Rodionov
Não há --dry-runopção.
Harald Albers
1
esta resposta é aquela se você deseja excluir todos os volumes, não importa o quê. obrigado!
Mücahit Yılmaz
5

Isso é o que descobri ser útil: https://github.com/chadoe/docker-cleanup-volumes

Shellscript para excluir volumes docker órfãos em / var / lib / docker / volumes e / var / lib / docker / vfs / dir Docker versão 1.4.1 até 1.11.x

Ele basicamente faz uma limpeza de todos os volumes órfãos / pendentes, mas inclui um, --dry-runmas também anota alguns comandos incluídos no docker (que são referenciados no comentário anterior)

Nota sobre Docker 1.9 e superior

Para excluir volumes órfãos no Docker 1.9 e superior, você também pode usar os comandos de volume docker integrados em vez deste script docker-cleanup-volumes. O comando integrado também exclui qualquer diretório em / var / lib / docker / volumes que não seja um volume, portanto, certifique-se de não colocar nada lá que deseja salvar:

Lista:

$ docker volume ls -qf dangling=true

Limpar:

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

Ou lidar melhor com um ambiente autônomo, mas específico do Linux:

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

Para responder à pergunta e emprestando de Marc, isso funciona:

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