run - ¿Docker huérfano montado volúmenes de host?
download docker image (3)
De la guía del usuario de Docker:
Si elimina los contenedores que montan volúmenes, incluido el contenedor dbdata inicial, o los siguientes contenedores db1 y db2, 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 efectivamente los volúmenes de datos entre contenedores. - source
Este es un comportamiento intencional para evitar la pérdida accidental de datos. Puede usar una herramienta como docker-cleanup-volumes para limpiar los volúmenes no utilizados.
Acabo de inspeccionar mi carpeta / var / lib / docker / volume y descubrí que está repleta de carpetas llamadas DoID UUID, cada una de las cuales contiene un archivo config.json con contenido a lo largo de las líneas de
{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}
dónde
/path/to/mounted/volume
es la ruta a la carpeta en el host que se montó en un contenedor acoplable con el modificador -v en algún momento. Tengo esas carpetas desde el comienzo de mis experimentos con Docker, es decir, hace aproximadamente 3 semanas.
Los contenedores en cuestión se detuvieron y Docker se abrió hace mucho tiempo, así que no puedo ver que esas entradas no hayan pasado su fecha de caducidad. Esto plantea la pregunta: ¿es el sobrante que estoy viendo un error o es necesario descartar manualmente dichas entradas de / var / lib / docker / volume?
Para Docker 1.13+ y los números de versión ce / ee 17+, use el
comando de
volume prune
docker volume prune
A diferencia de la consulta
dangling=true
, esto no eliminará los volúmenes basados en controladores "remotos".
Para Docker 1.9 y versiones posteriores hay una forma nativa:
Lista todos los volúmenes huérfanos con
$ docker volume ls -qf dangling=true
Elimínalos a todos con
$ docker volume rm $(docker volume ls -qf dangling=true)