¿Cómo eliminar todos los volúmenes de la ventana acoplable?

94

Si hago una docker volume ls, mi lista de volúmenes es así:

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

y quiero eliminar todos mis volúmenes a la vez. ¿Cómo puedo hacerlo?

Avara
fuente

Respuestas:

194

El comando oficial para eliminar todos los datos no utilizados (incluidos los volúmenes sin contenedores) será con Docker 1.13

docker system prune  

Si desea limitar solo a los volúmenes, eliminando solo los volúmenes no utilizados :

docker volume prune

También tiene docker image prune, docker container pruneetc:
Ver más en " objetos sin usar la pasa Docker ".

Consulte las confirmaciones 86de7c0 y PR 26108 .

Puedes verlo en acción en 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 forma actual (pre-docker 1.13) de administrar el volumen se introdujo con PR 14242 y el docker volumecomando , que documenta en su comentario de julio de 2015:

docker volume rm $(docker volume ls -q --filter dangling=true)
VonC
fuente
Esto es genial, gracias. No sabía nada de los nuevos prunecomandos.
treeface
3
Los comandos de poda son geniales, pero ten cuidado con ellos. Parece que asumen que los contenedores se están ejecutando en el momento en que los llama. Purgará las cosas que puedan estar asociadas pero que no estén en uso activo (por ejemplo, redes), lo que provocará fallas la próxima vez que se inicien los contenedores existentes. Use los danglingfiltros con anticipación si no está seguro de lo que podría
podarse
docker system pruneno parece eliminar los volúmenes locales pero los docker volume pruneordena
Maciek Rek
23

Editado en 2017: esta respuesta se dio el 16 de abril de 2016 y ahora está desactualizada y es correcta solo para la versión de Docker anterior a la 1.13, use la respuesta de @VonC, ahora está marcada como correcta

Para eliminar volúmenes no utilizados, puede usar el volume rmcomando de docker integrado . El rmcomando también elimina cualquier directorio /var/lib/docker/volumesque no sea un volumen, así que asegúrese de no haber puesto nada allí que desee guardar:
Comando para enumerar volúmenes, un poco más correcto que el suyo:

$ docker volume ls -qf dangling=true

Limpiar:

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

más detalles sobre ls aquí , sobre rm aquí

vvchik
fuente
1
No lo ejecutaría sin probar --dry-runprimero la lista de volúmenes colgantes con el parámetro.
Sergei Rodionov
No hay --dry-runopción.
Harald Albers
1
esta respuesta es la única si desea eliminar todos los volúmenes sin importar qué. ¡Gracias!
Mücahit Yılmaz
5

Esto es lo que me ha resultado útil: https://github.com/chadoe/docker-cleanup-volumes

Shellscript para eliminar volúmenes de Docker huérfanos en / var / lib / docker / volume y / var / lib / docker / vfs / dir Docker versión 1.4.1 hasta 1.11.x

Básicamente hace una limpieza de los volúmenes huérfanos / colgantes, pero incluye un --dry-runpero también toma nota de algunos comandos incluidos en la ventana acoplable (a los que se hace referencia en el comentario anterior)

Nota sobre Docker 1.9 y versiones posteriores

Para eliminar volúmenes huérfanos en Docker 1.9 y versiones posteriores, también puede usar los comandos de volumen de la ventana acoplable integrados en lugar de este script docker-cleanup-volume. El comando incorporado también elimina cualquier directorio en / var / lib / docker / volume que no sea un volumen, así que asegúrese de no poner nada allí que desee guardar:

Lista:

$ docker volume ls -qf dangling=true

Limpiar:

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

O, manejando una operación no operativa mejor pero específica de Linux:

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

Para responder a la pregunta y tomando prestado de Marc, esto funciona:

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