Tengo algunos contenedores docker 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 Docker tiene algún tipo de comando para liberar algo de uso del disco.
ACTUALIZAR:
De hecho docker system prune -a
, ya lo intenté , lo que reclamó 0Kb.
Además, el tamaño de mi disco / docker / overlay2 es mucho mayor que la salida de docker system df
Después de leer la documentación de la ventana acoplable 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.
docker
docker-compose
docker-machine
qichao_he
fuente
fuente
docker image prune --all
y luegodocker system prune -a
. Ha recuperado mi espacio en disco en alrededor de 50 GB, que estaba siendo utilizado por archivos en / var / lib / docker / overlay2. Perodocker system prune -a
habría sido suficiente. Además, mis detalles de configuración son:OS: Ubuntu 20
,Docker : 19.03.12
Respuestas:
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 diversas 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.fuente
docker system prune -a
, que recuperó 0kb de espacio. En este momento, el caso para mí es que el tamaño del disco / docker / overlay2 es mucho mayor que la salida dedocker system df
. Esa es la razón por la que sigo investigando este tema. Nuevamente, gracias por su respuesta señor. Supongo que necesito leer más sobre la documentación de la ventana acoplable o probablemente borrar la ventana acoplable por completo y reiniciarla. Solo necesito mantener una base de datos de/var/lib/docker
lugar de un solo subdirectorio que lo dejaría en un estado inconsistente.Encontré que esto funcionó mejor para mí:
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 del
/usr/lib/docker/overlay2/
carpeta.fuente
docker system df
muestra (es posible que todavía esté fuera del espacio y eseoverlay2
basurero maligno debe ser bombardeado manualmente.)Tuve este problema ... Era el registro lo que era enorme. Los registros están aquí:
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:
fuente
overlay2
. En mi caso, la capacidad total de/var/lib/docker
era de 50 GB y 36 GB de ella fue consumida por un archivo:/var/lib/docker/overlay2/<container id>/diff/var/log/faillog
. Suponiendo que este archivo no es fundamental para mantener todo en funcionamiento, mi truco a corto plazo es simplemente eliminarlo (y tal vez también lo ajustedocker-compose
).también tuvo problemas con el crecimiento rápido
overlay2
/var/lib/docker/overlay2
- es una carpeta donde la ventana acoplable almacena capas grabables para su contenedor.docker system prune -a
- puede funcionar solo si el recipiente se detiene y se retira.en mi pude averiguar qué consume espacio al entrar
overlay2
e investigar.esa carpeta contiene otras carpetas con nombre hash. cada uno de ellos tiene varias carpetas, incluida la
diff
carpeta.diff
carpeta: contiene la diferencia real escrita por un contenedor con la estructura de carpeta exacta como su contenedor (al menos en mi caso, ubuntu 18 ...)Así que solía
du -hsc /var/lib/docker/overlay2/LONGHASHHHHHHH/diff/tmp
descubrir que/tmp
dentro de mi contenedor está la carpeta que se contamina .Entonces, como solución temporal, he usado el
-v /tmp/container-data/tmp:/tmp
parámetro para eldocker run
comando para asignar la/tmp
carpeta interna al host y configurar un cron en el host para limpiar esa carpeta.La tarea cron fue simple:
sudo nano /etc/crontab
*/30 * * * * root rm -rf /tmp/container-data/tmp/*
save and exit
NOTA:
overlay2
es la carpeta de la ventana acoplable del sistema y pueden cambiar su estructura en cualquier momento. Todo lo anterior se basa en lo que vi allí. Tuve que ir a la estructura de carpetas de la ventana acoplable solo porque el sistema estaba completamente sin espacio e incluso no me permitía ingresar al contenedor de la ventana acoplable.fuente
/var/log/apache2/error.log
. Restablezco error.log y access.log y agrego un nuevo volumen para permitir una administración más fácilFondo
La culpa del problema se puede dividir entre nuestra mala configuración de los volúmenes de contenedores y un problema con la ventana acoplable que filtra (no se libera) los datos temporales escritos en estos volúmenes. Deberíamos estar mapeando (ya sea a carpetas de alojamiento u otras reclamaciones de almacenamiento persistentes) todas las carpetas temporales / registros / temporales del contenedor donde nuestras aplicaciones escriben con frecuencia y / o mucho. Docker no asume la responsabilidad de la limpieza de todos los llamados EmptyDirs creados automáticamente ubicados por defecto en
/var/lib/docker/overlay2/*/diff/*
. El contenido de estas carpetas "no persistentes" debe ser purgado automáticamente por la ventana acoplable después de que se detenga el contenedor, pero aparentemente no es así (pueden ser incluso imposibles de purgar desde el lado del host si el contenedor aún se está ejecutando, y puede estar ejecutándose durante meses a la vez).Solución alterna
Una solución requiere una limpieza manual cuidadosa y, aunque ya se describió en otra parte, aún puede encontrar algunas sugerencias de mi estudio de caso, que traté de hacer lo más instructivo y generalizable posible.
Entonces, lo que sucedió es que la aplicación culpable (en mi caso
clair-scanner
) logró escribir durante unos meses cientos de gigas de datos en la/diff/tmp
subcarpeta de docker'soverlay2
Entonces, como todas esas subcarpetas en
/diff/tmp
eran bastante autoexplicativas (todas tenían el formularioclair-scanner-*
y tenían fechas de creación obsoletas), detuve el contenedor asociado (docker stop clair
) y eliminé cuidadosamente estas subcarpetas obsoletasdiff/tmp
, comenzando prudentemente con una sola (la más antigua), y probando el impacto en el motor de la ventana acoplable (que requirió reiniciar [systemctl restart docker
] para recuperar espacio en disco):Recuperé cientos de gigas de espacio en disco sin la necesidad de volver a instalar la ventana acoplable o purgar todas sus carpetas. Todos los contenedores en ejecución tenían que detenerse en un momento dado, porque se requería el reinicio del demonio de la ventana acoplable para recuperar espacio en el disco, así que asegúrese primero de que sus contenedores de conmutación por error se estén ejecutando correctamente en otro / otro nodo / s). Sin embargo, me gustaría que el
docker prune
comando pudiera cubrir los datos obsoletos/diff/tmp
(o incluso/diff/*
) también (a través de otro interruptor).Es un problema de 3 años ahora, puede leer su rica y colorida historia en los foros de Docker, donde se propuso una variante destinada a los registros de aplicaciones de la solución anterior en 2019 y parece haber funcionado en varias configuraciones: https: // foros.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604
fuente
ADVERTENCIA: NO UTILIZAR EN UN SISTEMA DE PRODUCCIÓN
Ok, primero intentemos podar el sistema
No tan bien, parece que limpió algunos megabytes. Vamos a volvernos locos ahora:
¡Agradable! Solo recuerde que esto NO se recomienda en nada más que en un servidor desechable. En este punto, la base de datos interna de Docker no podrá encontrar ninguna de estas superposiciones y puede causar consecuencias no deseadas.
fuente
/var/lib/docker
directorio (mientras el demonio está detenido y asumiendo que el directorio no contiene montajes especiales del sistema de archivos o similares) es de hecho una forma válida y rápida de volver al punto de partida. No estoy seguro de por qué está recibiendo todos los votos negativos. Docker intenta recuperarse automáticamente, reconocerá cuando se pierda toda esperanza y reinicializará el/var/lib/docker
directorio según sea necesario.NO HAGA ESTO EN PRODUCCIÓN
La respuesta dada por @ ravi-luthra técnicamente funciona, ¡pero tiene algunos problemas!
En mi caso, solo estaba intentando recuperar espacio en disco. los
lib/docker/overlay
carpeta ocupaba 30 GB de espacio y solo ejecuto algunos contenedores con regularidad. Parece que Docker tiene algún problema con la fuga de datos y algunos de los datos temporales no se borran cuando el contenedor se detiene.Así que seguí adelante y eliminé todo el contenido de la
lib/docker/overlay
carpeta. Después de eso, Mi instancia de Docker se volvió inutilizable. Cuando intenté ejecutar o construir cualquier contenedor, me dio este error:Luego, con un poco de prueba y error, resolví este problema ejecutando
(ADVERTENCIA: Esto eliminará todos sus datos dentro de los volúmenes de la ventana acoplable)
Por lo tanto, no se recomienda realizar limpiezas tan sucias a menos que comprenda completamente cómo funciona el sistema.
fuente
Todo en / var / lib / docker son sistemas de archivos de contenedores. Si detiene todos sus contenedores y los poda, debería terminar con la carpeta vacía. Probablemente no quieras eso, así que no borres cosas al azar allí. No elimine cosas en / var / lib / docker directamente. Puede que a veces te salgas con la tuya, pero no es aconsejable por muchas razones.
Haz esto en su lugar:
Lo que verá son los archivos más grandes que se muestran en la parte inferior. Si lo desea, averigüe en qué contenedores están esos archivos, ingrese esos contenedores
docker exec -ti containername -- /bin/sh
y elimine algunos archivos.También puede realizar
docker system prune -a -f
un trabajo cron diario / semanal siempre que no deje contenedores y volúmenes detenidos que le interesen. Es mejor averiguar las razones por las que está creciendo y corregirlas a nivel de contenedor.fuente
Recientemente tuve un problema similar, overlay2 se hizo cada vez más grande, pero no pude averiguar qué consumía la mayor parte del espacio.
df
me mostró que overlay2 tenía un tamaño aproximado de 24 GB.Con
du
traté de averiguar qué ocupaba el espacio ... y fallé.La diferencia provino del hecho de que los archivos eliminados (principalmente archivos de registro en mi caso) todavía estaban siendo utilizados por un proceso (Docker). Por lo tanto, el archivo no aparece con,
du
pero el espacio que ocupa se mostrará condf
.Un reinicio de la máquina host ayudó. Reiniciar el contenedor de la ventana acoplable probablemente ya hubiera ayudado ... Este artículo en linuxquestions.org me ayudó a resolver eso.
fuente
agregando al comentario anterior, en el que las personas sugieren podar el sistema como volúmenes colgantes claros, imágenes, contenedores de salida, etc., en algún momento su aplicación se vuelve culpable, generó demasiados registros en poco tiempo y si usa un volumen directo vacío (volúmenes locales ) esto llena las particiones / var. En ese caso, encontré el siguiente comando muy interesante para averiguar qué está consumiendo espacio en mi disco de partición / var.
du -ahx / var / lib | sort -rh | cabeza -n 30
Este comando enumerará los 30 primeros, que consume la mayor parte del espacio en un solo disco. Significa que si está utilizando almacenamiento externo con sus contenedores, consume mucho tiempo para ejecutar du command. Este comando no contará los volúmenes de montaje. Y es mucho más rápido. Obtendrá los directorios / archivos exactos que consumen espacio. Luego puede ir a esos directorios y verificar qué archivos son útiles o no. Si estos archivos son necesarios, puede moverlos a algún almacenamiento persistente haciendo un cambio en la aplicación para usar el almacenamiento persistente para esa ubicación o cambiar la ubicación de esos archivos. Y para descansar puedes limpiarlos.
fuente
Usé "docker system prune -a" y limpió todos los archivos debajo de los volúmenes y overlay2
fuente