problema de espacio en Docker devmapper y CentOS7

103

Estoy aprendiendo Docker y estoy usando v1.11.0 Estoy tratando de instalar hadoop pero devmapper se queja de espacio libre en disco.

devmapper: Thin Pool has 82984 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

He eliminado todas mis imágenes pero el problema persiste:

[root@localhost hadoop_docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              47af6ca8a14a        3 weeks ago         125 MB
[root@localhost hadoop_docker]#

y esta es mi configuración de disco:

[root@localhost ~]# lsblk
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                          8:0    0    8G  0 disk
├─sda1                       8:1    0  500M  0 part /boot
└─sda2                       8:2    0  7.5G  0 part
  ├─centos-root            253:0    0  6.7G  0 lvm  /
  └─centos-swap            253:1    0  820M  0 lvm  [SWAP]
sr0                         11:0    1 1024M  0 rom
loop0                        7:0    0  100G  0 loop
└─docker-253:0-844682-pool 253:2    0  100G  0 dm
loop1                        7:1    0    2G  0 loop
└─docker-253:0-844682-pool 253:2    0  100G  0 dm

PREGUNTA: ¿Cómo puedo liberar espacio en disco?

gracias

Manuel Sopena Ballesteros
fuente
1
¿Esto también está relacionado con devicemapper en problemas de almacenamiento irrecuperable de loopback? github.com/docker/docker/issues/3182 "devicemapper no recomendado para uso en producción". Es mejor alejarse del mapeador de dispositivos por algunas razones. Me resultó bastante fácil cambiar al controlador de almacenamiento superpuesto, YMMV por supuesto, pero espero que no demasiado. 'rm -rf / var / lib / docker' es algo opcional al cambiar, pero es fácil y lo recomiendo encarecidamente. projectatomic.io/blog/2015/06/…
gaoithe
1
Para su información, puede ver el uso del disco de grupo delgado con " sudo lvs". Esto ayuda cuando intenta averiguar "cuánto" espacio en disco necesita limpiar (usando las respuestas dadas).
Aaron D. Marasco

Respuestas:

28

Puedes usar:

docker system prune -a -f --volumes

dónde:

  • -a == elimina todas las imágenes no utilizadas
  • -f == fuerza
  • --volumes == podar volúmenes.

ver: https://docs.docker.com/engine/reference/commandline/system_prune/#description

Como nota al margen, tuve muchos problemas cuando utilicé el controlador de mapeo de dispositivos en mi entorno. Solía ​​limpiar como mencioné, pero todavía había otros problemas con el mapeador de dispositivos. Recomiendo encarecidamente pasar a overlay2, resolvió casi todo por completo.

Tidhar Klein Orbach
fuente
1
Regularmente ejecutamos los comandos en la respuesta de @ Cokoda-Raka, pero en un host Docker en particular, este comando era necesario cuando overaly2 estaba consumiendo una cantidad significativa de espacio en disco, más de lo que debería. Creo que también agregaré este comando a nuestras tareas de limpieza automatizadas.
StockB
1
Esto ayudó en RHEL 7 con Docker 1.13.1. Después de ejecutar docker container prune, docker image prune, docker volume prune, todavía nos dieron el error devmapper / Delgado piscina. El comando anterior funcionó, despejando el espacio necesario y eliminando la necesidad de reiniciar el demonio.
Johnathan Elmore
167

Ejecute estos tres. No es necesario retirar los contenedores RUNNING.

  1. Procesos de limpieza salidos:

    docker rm $(docker ps -q -f status=exited)
    
  2. Limpieza de volúmenes colgantes:

    docker volume rm $(docker volume ls -qf dangling=true)
    
  3. Limpieza de imágenes colgantes:

    docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
    
Cokorda Raka
fuente
4
Lo aprendí de aquí: stackoverflow.com/questions/32723111/…
Cokorda Raka
19
La versión 1.13 ahora permite invocar docker system prune docs.docker.com/engine/reference/commandline/system_prune
Vivek Kodira
1
Esta probablemente debería ser la respuesta aceptada. La otra respuesta puede potencialmente matar más contenedores de los que desea matar.
DigitalFiz
2
Estos comandos son muy útiles para limpiar el disco de la máquina, pero no solucionaron el problema con el mapeador de dispositivos y el espacio.
Paulo Oliveira
4
Todavía no entiendo "qué" significa este mensaje de error, así que incluso si esos comandos funcionan, no entendería completamente por qué. ¿Qué es "piscina fina"? ¿Y qué tienen que ver los procesos de salida con la "liberación de bloques de datos"?
yiati