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"
La recolección de basura de Docker se puede hacer de una manera sencilla utilizando otro contenedor de ventana acoplable https://github.com/spotify/docker-gc
Podría hacerlo funcionar como un cron usando https://github.com/flaccid/docker-docker-gc-crond
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