¿Es seguro limpiar Docker/overlay2/?

Resuelto qichao_he asked hace 7 años • 24 respuestas

Tengo algunos contenedores acoplables ejecutándose en AWS EC2 , la carpeta /var/lib/docker/overlay2 crece muy rápido en tamaño de disco.

Me pregunto si es seguro eliminar su contenido. o si la ventana acoplable tiene algún tipo de comando para liberar parte del uso del disco.


ACTUALIZAR:

De hecho, ya lo intenté docker system prune -ay recuperé 0 Kb.

Además, el tamaño de mi disco /docker/overlay2 es mucho mayor que la salida dedocker system df

Después de leer la documentación de Docker y la respuesta de BMitch, creo que es una idea estúpida tocar esta carpeta e intentaré otras formas de recuperar mi espacio en disco.

qichao_he avatar Oct 10 '17 23:10 qichao_he
Aceptado

Docker usa /var/lib/docker para almacenar sus imágenes, contenedores y volúmenes locales con nombre. Eliminar esto puede provocar la pérdida de datos y posiblemente detener el funcionamiento del motor. El subdirectorio overlay2 contiene específicamente las distintas capas del sistema de archivos para imágenes y contenedores.

Para limpiar contenedores e imágenes no utilizados, consulte docker system prune. También hay opciones para eliminar volúmenes e incluso imágenes etiquetadas, pero no están habilitadas de forma predeterminada debido a la posibilidad de pérdida de datos:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
  -a, --all             Remove all unused images not just dangling ones
      --filter filter   Provide filter values (e.g. 'label=<key>=<value>')
  -f, --force           Do not prompt for confirmation
      --volumes         Prune volumes

Lo que una poda nunca eliminará incluye:

  • contenedores en ejecución (enumerelos con docker ps)
  • registros en esos contenedores (consulte esta publicación para obtener detalles sobre cómo limitar el tamaño de los registros)
  • cambios en el sistema de archivos realizados por esos contenedores (visibles con docker diff)

Además, es posible que Docker no vea cualquier cosa creada fuera de las carpetas normales de Docker durante esta recolección de basura. Esto podría deberse a alguna otra aplicación que escribe en este directorio o a una configuración previa del motor de Docker (por ejemplo, cambiar de AUFS a overlay2, o posiblemente después de habilitar los espacios de nombres de usuario).

¿Qué pasaría si se ignora este consejo y se elimina una sola carpeta como overlay2 de este sistema de archivos? Los sistemas de archivos del contenedor se ensamblan a partir de una colección de capas del sistema de archivos, y la carpeta overlay2 es donde Docker realiza algunos de estos montajes (los verá en la salida cuando mountse ejecuta un contenedor). Eliminar algunos de estos cuando están en uso eliminaría partes del sistema de archivos de un contenedor en ejecución y probablemente interrumpiría la capacidad de iniciar un nuevo contenedor a partir de una imagen afectada. Consulte esta pregunta para conocer uno de los muchos resultados posibles.


Para actualizar completamente la ventana acoplable a un estado limpio, puede eliminar todo el directorio, no solo los subdirectorios como overlay2 :

# danger, read the entire text around this code before running
# you will lose data
sudo -s
systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker
exit

El motor se reiniciará en un estado completamente vacío, lo que significa que perderá todo:

  • imágenes
  • contenedores
  • volúmenes nombrados
  • redes creadas por el usuario
  • estado de enjambre
BMitch avatar Oct 10 '2017 16:10 BMitch

Descubrí que esto funcionó mejor para mí:

docker image prune --all

De forma predeterminada, Docker no eliminará las imágenes con nombre, incluso si no se utilizan. Este comando eliminará las imágenes no utilizadas.

Tenga en cuenta que cada capa de una imagen es una carpeta dentro de la /usr/lib/docker/overlay2/carpeta.

Sarke avatar Jul 10 '2019 06:07 Sarke

Tuve este problema... Era el registro el que era enorme. Los registros están aquí:

/var/lib/docker/containers/<container id>/<container id>-json.log

Puede administrar esto en la línea de comando de ejecución o en el archivo de redacción. Ver allí: Configurar controladores de registro

Personalmente agregué estas 3 líneas a mi archivo docker-compose.yml:

my_container:
  logging:
    options:
      max-size: 10m
Tristan avatar Apr 09 '2019 07:04 Tristan