¿Por qué Docker-in-docker utiliza tanto espacio en disco?

¿Por qué Docker-in-docker utiliza tanto espacio en disco?

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, dfse 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 pruneesos 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/dockerestá 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/dockery 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.

información relacionada