¿Volúmenes de host montados en Docker huérfanos?


Acabo de inspeccionar mi carpeta /var/lib/docker/volumes y descubrí que está repleta de carpetas nombradas como UUID Docker, cada una de las cuales contiene una configuración.archivo json con contenido similar a

{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}

Donde

/path/to/mounted/volume

Es la ruta a la carpeta en el host que se montó en un contenedor docker con el conmutador-v en algún momento. Tengo tales carpetas que se remontan al comienzo de mis experimentos con Docker, es decir, hace aproximadamente 3 semanas.

Los contenedores en cuestión fueron detenidos y docker rm'ed hace mucho tiempo, así que no puedo ver que esas entradas no están más allá de su fecha de venta. Esto plantea la pregunta-es el sobrante que estoy viendo un error o es necesario descartar manualmente tales entradas de /var/lib/docker/volumes?

Author: DroidOS, 2015-01-07

3 answers

Para Docker 1.9 y arriba hay una forma nativa:

Listar todos los volúmenes huérfanos con

$ docker volume ls -qf dangling=true

Eliminarlos todos con

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

 134
Author: Roman Usherenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-11 10:46:05

De la guía del usuario de Docker:

Si elimina contenedores que montan volúmenes, incluido el contenedor dbdata inicial o los contenedores db1 y db2 posteriores, los volúmenes no se eliminarán. Para eliminar el volumen del disco, debe llamar explícitamente a docker rm-v contra el último contenedor con una referencia al volumen. Esto le permite actualizar o migrar eficazmente volúmenes de datos entre contenedores. - fuente

Este es un comportamiento intencional para evite la pérdida accidental de datos. Puede utilizar una herramienta como docker-cleanup-volumes para limpiar los volúmenes no utilizados.

 28
Author: Kevan Ahlquist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-07 07:34:36

Para Docker 1.13+ y los números de versión ce/ee 17+, utilice el volume prune command

docker volume prune

A diferencia de la consulta dangling=true, esto no eliminará los volúmenes basados en controladores "remotos".

 7
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-19 03:15:04