orquestador fargate español elastic ecs ecr container aws amazon-web-services docker coreos

amazon-web-services - fargate - install docker amazon linux 2



¿Cómo limpiar el directorio de superposición de docker? (8)

Acabamos de tener este problema y la respuesta de btafarelo me ayudó en parte, o al menos me hizo sentir mejor al eliminar las entradas de sha256.

Información del sistema: instancias de ec2 que ejecutan CoreOS 1.12 detrás de un ELB

  • Drene la instancia docker de la ELB
  • Ventana de cierre

    systemctl stop docker rm -rf /var/lib/docker/overlay/*

  • Ejecutar los resultados de los comandos.

    for d in $(find /var/lib/docker/image/overlay -type d -name ''*sha256*''); do echo rm -rf $d/* ; done

  • reiniciar (la forma más fácil de recuperar todo)

Esto recuperó aproximadamente el 25% del disco después de que los servicios se reiniciaron sin efectos secundarios negativos.

Estoy ejecutando docker a través de CoreOS y ECS de AWS. Tuve una imagen defectuosa que se reinició muchas veces, y los contenedores todavía están alrededor, llenaron la partición de mi unidad. Específicamente, /var/lib/docker/overlay/ contiene una gran cantidad de archivos / directorios.

Sé que docker-cleanup-volumes es una cosa, pero limpia el directorio / volume, no el directorio / overlay.

docker ps -a muestra más de 250 intentos de inicio en mi contenedor mal docker. Aunque no están corriendo.

Aparte de rm -rf /var/lib/docker/overlay/* , ¿cómo puedo / debo limpiar esto?


Aquí está la forma de pirateo en que estoy haciendo esto ahora. No lo aceptaré como respuesta porque espero que haya una mejor manera.

# delete old docker processes docker rm `docker ps -a | grep Exited | awk ''{print $1 }''` ignore_errors: true # delete old images. will complain about still-in-use images. docker rmi `docker images -aq`


Aquí está la resolución para limpiar el directorio de superposición de la ventana acoplable de lebkowski.name/docker-volumes

docker images --no-trunc | grep ''<none>'' | awk ''{ print $3 }'' | xargs -r docker rmi docker ps --filter status=dead --filter status=exited -aq | xargs docker rm -v

para Docker <1.9:

find ''/var/lib/docker/volumes/'' -mindepth 1 -maxdepth 1 -type d | grep -vFf <(docker ps -aq | xargs docker inspect | jq -r ''.[]|.Mounts|.[]|.Name|select(.)'')

O para Docker> = 1.9:

docker volume ls -qf dangling=true | xargs -r docker volume rm


He añadido esto a bashrc en mi entorno de desarrollo y me he acostumbrado a ejecutarlo todos los días más o menos.

function cleanup_docker() { docker ps -f status=exited -q | xargs -r docker rm docker images -f dangling=true -q | xargs -r docker rmi }

En algunos casos, la siguiente secuencia de comandos puede liberar más espacio, ya que intentará eliminar todas las imágenes y solo fallará en silencio:

function cleanup_docker_aggressive() { for i in $(docker images --no-trunc -q | sort -u) do docker rmi $i 2> /dev/null done }

Lamentablemente, no son significativamente más limpios que su solución.

EDITAR: A partir de Docker 1.13, puede usar el sistema docker :

docker system df # to check what is using space docker system prune # cleans up also networks, build cache, etc

EDITAR: A partir de Docker 2017.09, también puede usar container e image

docker container prune docker image prune -a

este último se puede usar con filtros sofisticados como --filter "until=24h"



Necesita inspeccionar sus imágenes / contenedores y eliminar las carpetas en / opt / docker / overlay que no se encontraron en la ejecución de inspeccionar

docker inspect $(docker ps -qa) | grep -oE ''[a-f0-9]{64}'' >> inspect-hashs.txt docker inspect $(docker images -qa) | grep -oE ''[a-f0-9]{64}'' >> inspect-hashs.txt sudo ls -l /var/lib/docker/overlay > overlays.txt diff -u inspect-hashs.txt overlays.txt | grep -E ''^/+'' | grep -oE ''[a-f0-9]{64}'' | xargs sudo rm -rf /opt/docker/overlay/


Por nuestra parte utilizamos:

sudo docker system prune -a -f

Que me guarde 3Go!

Usamos también los comandos famosos:

sudo docker rm -v $(sudo docker ps -a -q -f status=exited) sudo docker rmi -f $(sudo docker images -f "dangling=true" -q) docker volume ls -qf dangling=true | xargs -r docker volume rm

Pusimos eso en cron para administrar un poco más eficientemente nuestro espacio en disco.

Aclamaciones

Referencia: https://forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604/4


docker ps

  • --tranquilo

  • --todos

  • --filter status = salido

docker rm

  • --fuerza

imágenes docker

  • --tranquilo
  • --todos
  • --filtro colgando = verdadero

docker rmi

  • - fuerza

Tu manera hacky está bien.

docker rm `docker ps -a | grep Exited | awk ''{print $1 }''`

Mi forma hacky es

docker rm $(docker ps --all | awk ''/ago/{print $1}'')

Una forma un poco más limpia es ejecutar la --quiet docker ps con el --quiet (-q) para obtener solo el número de identificación y - --filter status=exited para - filtrar solo los que han salido.

docker rm $(docker ps --filter status=exited --quiet) # remove stopped docker processes

o para ejecutar la docker rm con el indicador --force (-f) y la docker ps con el indicador --all (-a) para apagar incluso los que están en ejecución

docker rm --force $(docker ps --all --quiet) # remove all docker processes

Lo que probablemente está ocupando todo ese espacio en disco después de varias compilaciones fallidas son las imágenes. Para ahorrar espacio en el disco en el host de la ventana acoplable, elimine periódicamente las imágenes no utilizadas de la ventana acoplable.

docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images

o para ser más agresivo, puedes --force (-f) para limpiar --all (-a) imágenes

docker rmi --force $(docker images --all --quiet) # clean all possible docker images

La forma de @analytik de ponerlo en una función .bashrc parece una idea práctica.

function cleanup_docker() { docker rm --force $(docker ps --all --quiet) # remove all docker processes docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images }

y si tiene la costumbre de generar muchas imágenes docker que no necesita, agréguela a .bash_logout