¿Cómo puedo eliminar las imágenes de Docker?

265

Tengo las siguientes imágenes:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

y cuando trato de eliminar uno de ellos obtengo:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

¿Cómo puedo eliminarlos? ¿Por qué hay tal conflicto?

alexyz78
fuente

Respuestas:

478

Para eliminar todas las imágenes, use el comando dado

docker rmi $(docker images -q)

Para eliminar todos los contenedores, use el comando dado

docker rm $(docker ps -a -q)

Advertencia: Esto destruirá todas sus imágenes y contenedores. ¡No será posible restaurarlos!

Esta solución es proporcionada por Techoverflow.net .

Soleado
fuente
17
Simple y directo. También debajo del comando para forzar la eliminación de imágenes. 'docker rmi -f $ (docker images -q)'
dimuthu
37
El equivalente de Windows docker images -q | %{docker rmi -f $_}
PowerShell
1
Primero usé el cmd en @muheed Cómo responder ( stackoverflow.com/a/30475249/2747020 ) para desbloquear la eliminación de algunas imágenes:sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Razec Luar
1
Windows Powershell para contenedores acoplablesdocker ps -a -q | %{docker rm -f $_}
Dexter
1
Como @ alexyz78 señala a continuación, ahora puede usar docker system prune. Por lo tanto, para borrar todo: docker kill $(docker ps -q)para detener los contenedores seguidos de a, docker system prune -ase eliminará todo - vea stackoverflow.com/a/44309011/247708
Bharat
101

Posible motivo: el motivo puede ser que esta imagen sea utilizada actualmente por un contenedor en ejecución. En tal caso, puede enumerar los contenedores en ejecución, detener el contenedor relevante y luego eliminar la imagen:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

Si no puede encontrar el contenedor por docker ps, puede usar esto para enumerar todos los contenedores ya salidos y eliminarlos.

docker ps -a | grep 60afe4036d97
docker rm <containerid>

Nota: Tenga cuidado de eliminar todos los contenedores salidos a la vez en caso de que use Volume-Onlycontenedores. Estos permanecen en Exitestado, pero contienen datos útiles .

Jiri
fuente
En realidad, recibirías un mensaje especificando eso. ¿Quizás otra imagen se basa en esta? Intente eliminar cualquier imagen que haya creado a partir de esta imagen primero.
qkrijger
12
Pude eliminar la imagen con sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm(gracias a github.com/dotcloud/docker/issues/3258 ) y luego consudo docker rmi 70c0e19168cf
alexyz78
2
Tenga cuidado al eliminar imágenes en Exitestado. Si está utilizando contenedores de solo volumen de datos, no se mantienen en ejecución.
aceofspades
1
awk can grep:awk '/Exit/ {print $1}'
Dwight Spencer
Tus órdenes arrojan esto Error response from daemon: No such container: .... Es difícil saber qué se debe reemplazar y con qué debo reemplazarlo. No use...
Felo Vilches
60

La razón del error es que, aunque la imagen no tenía ninguna etiqueta, todavía existe un contenedor creado en esa imagen que podría estar en el exitedestado. Por lo tanto, debe asegurarse de haber detenido y eliminado todos los contenedores creados en esas imágenes. El siguiente comando lo ayuda a eliminar todos los contenedores que no se están ejecutando:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

Ahora esto elimina todas las <none>imágenes colgantes no intermedias :

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

Nota: Para detener todos los contenedores en ejecución:

docker stop `docker ps -q`
eldos
fuente
1
Gracias por esto, encontré que esta es la implementación más limpia.
Joseph Sawyer
77
Tenga cuidado si tiene contenedores de volumen de datos ya que tienen "estado = salido". Esto significa que perderá todos sus datos.
Johan
19

La imagen podría ser utilizada actualmente por un contenedor en ejecución, por lo que primero debe detener y eliminar los contenedores.

docker stop <container-name>
docker rm <container-id>

Entonces podrías intentar eliminar la imagen:

docker rmi <image-id>

Debe asegurarse de que esta imagen no dependa de otras imágenes (de lo contrario, debe eliminarlas primero).

Tuve un caso extraño en el que no tenía más contenedores vivos ( docker ps -ano devolvió nada) pero no pude eliminar la imagen y su dependencia de la imagen.

Para resolver estos casos especiales, puede forzar la eliminación de la imagen con esto:

docker rmi -f <image-id>
madx
fuente
19

En Bash:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

Esto eliminará todas las imágenes con el nombre "<ninguno>". Encontré esas imágenes redundantes.

marcell
fuente
3
Esto no responde la pregunta, pero sigue siendo muy útil. Gracias.
binwiederhier
55
simplifique este comando docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi, puede necesitar sudopermiso
Larry Cai
15

Encontré la respuesta en este comando:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

Tuve tu problema cuando borré algunas imágenes que estaban siendo utilizadas, y no me di cuenta (usando docker ps -a).

ivangoblin
fuente
9

Desde Docker ver. 1.13.0 (enero de 2017) está el system prunecomando:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage
alexyz78
fuente
7

Además de la respuesta de Sunny:

Para eliminar todas las imágenes en una máquina Windows (con Docker para Windows) en una ventana de PowerShell, haga lo siguiente:

docker images -q | %{docker rmi -f $_}

Para eliminar todos los contenedores en una máquina Windows (con Docker para Windows) en una ventana de PowerShell, haga lo siguiente:

docker ps -a -q | %{docker rm -f $_}
Paul Vogel
fuente
6

Primero, elimine todos los contenedores con el siguiente comando

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

Luego, elimine la imagen por su ID con el siguiente comando

sudo docker rmi <image-id>
Muheed
fuente
Vale la pena señalar en caso de que esto no sea obvio para algunos que esto eliminará todos los contenedores Docker en ejecución.
Michael Mior
4

Retire todos los contenedores

docker ps -q -a | xargs docker rm

Forzar la eliminación de todas las imágenes de Docker

docker rmi -f $(docker images -f dangling=true -q)
Todo es variado
fuente
4

Simplemente puede agregar --forceal final del comando. Me gusta:

sudo docker rmi <docker_image_id> --force

Para hacerlo más inteligente , puede agregar como:

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

Aquí en docker ps$ 1 está la primera columna, es decir, la ID del contenedor Docker.

Y docker images$ 3 es la tercera columna, es decir, la ID de la imagen de Docker.

kushalbhattad
fuente
3

La versión más compacta de un comando para eliminar todas las imágenes sin etiquetar es:

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')
rojo
fuente
3

Para eliminar alguna imagen de Docker, debe ejecutar el siguiente comando:

$ docker rmi <docker_image_id>

Entonces, para eliminar todas las imágenes de Docker, puede ejecutar el siguiente comando:

$ docker rmi $(docker images -q)

Ahora, si desea eliminar todas las imágenes de Docker (incluidas las imágenes que están en uso), puede agregar la bandera -f, por ejemplo:

$ docker rmi -f $(docker images -q)
José David García Rodríguez
fuente
3

Utilizar

docker image prune -all

o

docker image prune -a

Eliminar todas las imágenes colgantes. Si -ase especifica, también eliminará todas las imágenes a las que ningún contenedor haga referencia.

Nota: Se le solicita confirmación antes de que la poda elimine algo, pero no se le muestra una lista de lo que se eliminará potencialmente. Además, docker image lsno admite el filtrado negativo, por lo que es difícil predecir qué imágenes se eliminarán realmente.

Como se indica en la documentación de Docker para podar .

Dylan
fuente
1

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 de Docker meltwater/docker-cleanup.

De esa manera no necesita ir a limpiarlo a mano.

Solo corre:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Se ejecutará cada 30 minutos (o durante el tiempo que lo configure con la opción DELAY_TIME = 1800) y limpiará los contenedores e imágenes salidos.

Más detalles: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Anigbo inocente
fuente