
A menudo ejecuto un contenedor de desarrollo VS Code para desarrollar un complemento de Home Assistant. Este contenedor de desarrollo ejecuta Docker (dentro de mi host Docker). Después de algunas horas de trabajo, mi host Docker se queda sin espacio en disco, lo que causa varios problemas. Aquí se muestra que este contenedor de desarrollo utiliza 52 GB, lo cual creo que es excesivo.
% docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 1.333GB 0B (0%)
Containers 1 1 52.17GB 0B (0%)
Local Volumes 1 1 220.2MB 0B (0%)
Build Cache 0 0 0B 0B
Dentro del contenedor de desarrollo, df
se muestra que la mayor parte de este uso proviene de Docker VFS:
% docker exec 7f666319eddf du -hd 1 /var/lib/docker/
54G /var/lib/docker/vfs
448K /var/lib/docker/containerd
8.0K /var/lib/docker/tmp
20M /var/lib/docker/image
28K /var/lib/docker/volumes
4.0K /var/lib/docker/swarm
3.1M /var/lib/docker/containers
116K /var/lib/docker/buildkit
16K /var/lib/docker/plugins
4.0K /var/lib/docker/runtimes
88K /var/lib/docker/network
54G /var/lib/docker/
Pero dentro del contenedor, Docker cree que sus contenedores utilizan menos de 1 GB.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 21 19 2.829GB 714.7MB (25%)
Containers 100 8 628.7MB 605.8MB (96%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
Y, sin embargo, después de ejecutarlo, docker container prune
esos 54 GB se reducen a 28 GB. Entonces, ¿por qué no aparece este uso en docker system df
?
Estoy ejecutando Docker Desktop 4.28.0 en macOS Sonoma. También tengo el mismo problema en Ventura.
Respuesta1
Esto sucede frecuentemente cuando /var/lib/docker
está dentro del contenedor y no un volumen. El sistema de archivos contenedor a menudo estará superpuesto y no es posible definir un sistema de archivos superpuesto dentro de un sistema de archivos superpuesto.
La alternativa cuando un controlador de sistema de archivos en capas no está disponible es utilizar el controlador "nativo" o "vfs", que es solo una copia de todo el sistema de archivos para cada capa. Entonces, si tiene una imagen de 100 MB y agrega un único archivo de 1 MB en la imagen de la ventana acoplable, ahora tendrá 201 MB de almacenamiento en la unidad, 100 MB para la capa original y 101 MB para la nueva capa. Cada contenedor también necesita agregar una capa de lectura/escritura en el sistema de archivos, de modo que la imagen completa se copie para cada contenedor creado.
La solución es montar un volumen /var/lib/docker
y asegurarse de que la fuente para ese montaje seaun sistema de archivos de respaldo compatiblepor uno de los controladores del sistema de archivos en capas.