Actualización de septiembre de 2016: Docker 1.13: PR 26108 y commit 86de7c0 introducen algunos comandos nuevos para ayudar a facilitar la visualización de cuánto espacio ocupan los datos del demonio de Docker en el disco y permiten limpiar fácilmente el exceso "innecesario".
docker system prune
eliminará TODOS los datos colgantes (es decir, en orden: contenedores detenidos, volúmenes sin contenedores e imágenes sin contenedores). Incluso datos no utilizados, con -a
opción.
Tu también tienes:
Para imágenes sin usar , use docker image prune -a
(para eliminar imágenes colgantes y sin usar).
Advertencia: ' sin usar ' significa "imágenes a las que ningún contenedor hace referencia": tenga cuidado antes de usar -a
.
Como se ilustra en la respuesta de AL , eliminará todas las imágenes no utilizadas, no solo las que cuelgan ... lo que puede ser demasiado.docker system prune --all
La combinación docker xxx prune
con la --filter
opción puede ser una excelente manera de limitar la poda ( docker SDK API 1.28 mínimo, por lo que docker 17.04+ )
Los filtros compatibles actualmente son:
until (<timestamp>)
- solo elimine contenedores, imágenes y redes creados antes de la marca de tiempo dada
label
( label=<key>
, label=<key>=<value>
, label!=<key>
, O label!=<key>=<value>
) - solamente eliminar los recipientes, imágenes, redes, y los volúmenes con (o sin , en caso de que label!=...
se utiliza) las etiquetas especificadas.
Consulte " Podar imágenes " para ver un ejemplo.
Respuesta original (septiembre de 2016)
Yo suelo hacer:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Tengo un alias para eliminar esas [imágenes colgantes] 13 :drmi
El dangling=true
filtro encuentra imágenes no utilizadas
De esa forma, se elimina cualquier imagen intermedia que ya no haga referencia a una imagen etiquetada.
Hago lo mismo primero para los procesos salidos (contenedores)
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
Como haridsv señala en los comentarios :
Técnicamente, primero debe limpiar los contenedores antes de limpiar las imágenes, ya que esto capturará más imágenes colgantes y menos errores .
Jess Frazelle (jfrazelle) tiene la función bashrc :
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
Para eliminar imágenes antiguas, y no solo imágenes "colgantes sin referencia", puede considerar docker-gc
:
Un simple contenedor de Docker y script de recolección de basura de imagen.
- Los contenedores que salieron hace más de una hora se eliminan.
- Las imágenes que no pertenecen a ningún contenedor restante después de eso se eliminan.
"dangling=true"
realmente significa?dcleanup
¡es increíble!docker system prune
elimina mucho más que solo imágenes. Asegúrese de usardocker image prune
en su lugar. Y tenga mucho cuidado con-a
: adocker system prune -a
puede tener un efecto devastador (también eliminando volúmenes). Finalmente, sí,-a
elimina las imágenes no utilizadas, editaré la respuesta.Actualice el segundo (2017-07-08):
Consulte (nuevamente) a VonC, utilizando el aún más reciente
system prune
. El impaciente puede omitir el mensaje con la-f, --force
opción:Los impacientes y temerarios también pueden eliminar "imágenes no utilizadas, no solo las que cuelgan" con la
-a, --all
opción:https://docs.docker.com/engine/reference/commandline/system_prune/
Actualizar:
Consulte la respuesta de VonC que utiliza los
prune
comandos agregados recientemente . Aquí está la conveniencia de alias de shell correspondiente:Vieja respuesta:
Eliminar contenedores detenidos (salidos):
Eliminar imágenes no utilizadas (colgantes):
Si ha ejercido una extrema precaución con respecto a la pérdida irrevocable de datos , puede eliminar los volúmenes no utilizados (colgantes) (v1.9 y posteriores):
Aquí están en un conveniente alias de shell:
Referencias
docker ps -f
docker rm
docker images -f
docker rmi
docker volume ls
docker volume rm
fuente
docker volume rm
receta. Agradeceré cualquier sugerencia que tenga.docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm
que funcionará siempre que nunca nombre sus volúmenes con algo similar a un guid. Puedo ajustar esto para la nueva sintaxis de filtro.Para eliminar viejas imágenes etiquetadas que tienen más de un mes:
Tenga en cuenta que va a fallar para eliminar las imágenes que se utilizan en un recipiente, se hace referencia en un repositorio, tiene imágenes de niños dependientes ... que es probablemente lo que quiere. De lo contrario, solo agregue la
-f
bandera.Ejemplo de
/etc/cron.daily/docker-gc
script:fuente
.CreatedSince
usa semanas como la unidad de tiempo en la salida incluso en imágenes que tienen muchas semanas de antigüedad, por ejemplo12 weeks
.docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Las otras respuestas son geniales, específicamente:
Pero necesitaba algo en medio de los dos comandos, así que la
filter
opción era lo que necesitaba:Espero que ayude :)
Para referencia: https://docs.docker.com/config/pruning/#prune-images
fuente
Suponiendo que tiene Docker 1.13 o superior, puede usar los comandos de poda. Para su pregunta específica para eliminar imágenes antiguas, desea la primera.
Recomendaría no acostumbrarse a usar el
docker system prune
comando. Creo que los usuarios eliminarán accidentalmente cosas que no pretenden. Personalmente, voy a usar principalmente los comandosdocker image prune
ydocker container prune
.fuente
docker system prune
sino las ciruelas pasas individuales.Hasta ahora (Docker versión 1.12) estamos utilizando el siguiente comando para eliminar todos los contenedores en ejecución. Además, si queremos eliminar los volúmenes, podemos hacerlo manualmente usando su respectiva etiqueta -v en el siguiente comando.
Eliminar todos los contenedores salidos
Eliminar todos los contenedores detenidos
Eliminar todos los contenedores en ejecución y detenidos
Retire todos los contenedores, sin ningún criterio.
Pero, en la versión 1.13 y superior, para el sistema completo y la limpieza, podemos usar directamente el siguiente comando:
Todos los contenedores, imágenes, redes y volúmenes no utilizados se eliminarán. También podemos hacer esto usando los siguientes comandos que limpian los componentes individuales:
fuente
Esto funcionó para mí:
fuente
El siguiente comando eliminará imágenes de más de 48 horas.
fuente
docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8
y luego aplicar un comando rmi para eliminar.docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
Recientemente escribí un script para resolver esto en uno de mis servidores:
fuente
Aquí hay un script para limpiar las imágenes de Docker y recuperar el espacio.
Guion original
https://github.com/vishalvsh1/docker-image-cleanup
Por lo general, Docker mantiene todos los archivos temporales relacionados con la creación de imágenes y capas en
/ var / lib / docker
Esta ruta es local al sistema, generalmente en LA partición raíz, "/" .
Puede montar un espacio de disco más grande y mover el contenido
/var/lib/docker
a la nueva ubicación de montaje y crear un enlace simbólico.De esta manera, incluso si las imágenes de Docker ocupan espacio, no afectará a su sistema, ya que utilizará alguna otra ubicación de montaje.
Publicación original: administre las imágenes de Docker en el disco local
fuente
Estoy usando este comando:
Esto eliminará todas las imágenes cuyo tiempo de creación sea mayor que hace 10 semanas.
fuente
IMAGE_CTIME
yBEFORE_DATETIME
en eseecho
comandoSi desea eliminar imágenes extraídas hace X meses, puede probar el siguiente ejemplo que elimina imágenes creadas hace tres meses:
fuente
Para podar todas las imágenes y volúmenes también
docker system prune -af --volumes
fuente
docker system prune -a
(Se le pedirá que confirme el comando. Utilícelo
-f
para forzar la ejecución, si sabe lo que está haciendo).fuente
docker system prune
eliminar incluso los volúmenes con nombre-a
.@VonC ya dio una respuesta muy agradable, pero para completar, aquí hay un pequeño script que he estado usando --- y que también destruye cualquier proceso de recado Docker si tienes algunos:
fuente
Error response from daemon: You cannot remove a running container
. Agregadodocker kill $(docker ps -q)
antes de la línea 3 para abordar$(docker images -q)
lugar de$(docker images | awk '/<none>/ { print $3 }')
?docker images -q
, obtengo un vector de identificadores de imagen, nada más. Si hago lo que hago, obtengo más, lo que me permite filtrar<none>
como lo hago aquí. ¿Tiene sentido?Para eliminar imágenes etiquetadas que no tienen un contenedor en ejecución, deberá usar un pequeño script:
fuente
Retire los contenedores viejos hace semanas.
docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')
Eliminar imágenes antiguas hace semanas. Ten cuidado. Esto eliminará las imágenes base que se crearon hace semanas pero que podrían estar usando sus nuevas imágenes.
docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')
fuente
Cómo eliminar una imagen etiquetada
docker rmi la etiqueta primero
docker rmi la imagen.
# que se puede hacer en una llamada docker rmi, por ejemplo: # docker rmi <repo: tag> <imageid>
(esto funciona en noviembre de 2016, Docker versión 1.12.2)
p.ej
Por ejemplo, eliminar por secuencias de comandos cualquier cosa anterior a 2 semanas.
fuente
-f fuerza
-a todos
-q en el modo
fuente
o
fuente
Ocasionalmente, me he encontrado con problemas en los que Docker asignará y continuará utilizando el espacio en disco, incluso cuando el espacio no esté asignado a ninguna imagen en particular o contenedor existente. La última forma en que generé este problema accidentalmente fue usando la construcción de centos "motor acoplable" en lugar de "acoplador" en RHEL 7.1. Lo que parece suceder es que a veces las limpiezas de contenedores no se completan con éxito y luego el espacio nunca se reutiliza. Cuando la unidad de 80 GB que asigné como / estaba llena de archivos / var / lib / docker, tuve que encontrar una forma creativa de resolver el problema.
Esto es lo que se me ocurrió. Primero para resolver el error completo del disco:
En este punto ya no tenía un error de disco lleno, pero todavía estaba desperdiciando una gran cantidad de espacio. Los siguientes pasos son ocuparse de eso.
Start Docker: systemctl start docker
Guarde todas las imágenes: docker save $ (imágenes de docker | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img
Desinstalar la ventana acoplable.
Borre todo en / var / lib / docker: rm -rf / var / lib / docker / [cdintv] *
Vuelva a instalar la ventana acoplable
Habilitar docker: systemctl enable docker
Iniciar docker: systemctl start docker
Restaurar imágenes: docker load </root/docker.img
Inicie cualquier contenedor persistente que necesite ejecutar.
Esto redujo el uso de mi disco de 67 GB para docker a 6 GB para docker.
No lo recomiendo para uso diario. Pero es útil para ejecutar cuando parece que Docker ha perdido la pista del espacio en disco usado debido a errores de software o reinicios inesperados.
fuente
Si desea limpiar automáticamente / periódicamente los contenedores salidos y eliminar imágenes y volúmenes que no están en uso por un contenedor en ejecución, puede descargar la imagen
meltwater/docker-cleanup
.Solo corre:
Se ejecuta cada 30 minutos por defecto. Sin embargo, puede establecer el tiempo de retraso utilizando este indicador en segundos (opción DELAY_TIME = 1800).
Más detalles: https://github.com/meltwater/docker-cleanup/blob/master/README.md
fuente
Si construye estas imágenes podadas usted mismo (de algunas otras imágenes base más antiguas), tenga cuidado con las soluciones aceptadas anteriormente basadas
docker image prune
, ya que el comando es contundente e intentará eliminar también todas las dependencias requeridas por sus últimas imágenes (el comando debe ser probablemente renombrado adocker image*s* prune
).La solución que se me ocurrió para las canalizaciones de compilación de imágenes de mi ventana acoplable (donde hay compilaciones diarias y etiquetas = las fechas están en el
YYYYMMDD
formato) es esta:fuente
Hay un plugin de gorrión docker-remove-dangling-images que puede usar para limpiar contenedores detenidos e imágenes no utilizadas (colgantes):
$ sparrow plg run docker-remove-dangling-images
Funciona tanto para el sistema operativo Linux y Windows.
fuente
Primer intento
docker images
para ver la lista de imágenes y copie el ID de HASH de IMAGEN en el portapapeles.correr
docker rmi -f <Image>
La opción de recordar
-f
es forzar la eliminación.fuente