¿Cómo eliminar las imágenes de Docker según el nombre?


93

Quiero eliminar todas las versiones de las imágenes de la ventana acoplable con nombres que contienen una cadena determinada ( imagename).
He intentado lo siguiente, pero parece que no funciona:

docker images | grep 'imagename' | xargs -I {} docker rmi

Respuestas:


136

Intente lo siguiente:

docker rmi $(docker images |grep 'imagename')

Windows Powershell:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

17
La versión actual de Docker admite esto (sin grep): docker rmi $ (imágenes de docker 'nombre de imagen')
Charlie

La versión actual de Docker parece admitir esto, ¿tal vez me falta algo? - docker rmi 'imagename'
Charlie

10
@Charlie Creo que la mayoría de la gente está buscando una manera de hacer coincidir todas las imágenes que coinciden con ' nombre de imagen ' en lugar de una sola imagen llamada exactamente 'nombre de imagen'.
RJFalconer

1
Recibo el siguiente error: "docker rmi requiere al menos 1 argumento".
michali

@michali Significa que no se devuelve ninguna imagen coincidente. ¿Puede verificar que hay una entrada coincidente presente simplemente ejecutando:docker images |grep 'imagename'
Rambler

71

Versión un poco más exacta: grepping solo en el nombre del repositorio:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

25
esto solo elimina las imágenes etiquetadas como más recientesdocker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
Drew

¡Gracias! Esto era lo que estaba buscando.
Hardhik

26
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

1
¿Puedes explicar qué hace esto? Los bits de código aleatorio pueden ser peligrosos.
kilojulios

6
docker images --format '{{.Repository}}:{{.Tag}}filtra la salida para que solo se muestren el repositorio y la etiqueta (es decir foo:latest). grep 'imagenamefiltra esas líneas solo a las imágenes que contienen imagename. Poner eso en $()evalúa eso y pasa al exterior, docker rmique elimina las imágenes que coincidieron.
Adam Parkin

Ampliando lo anterior, puede eliminar todas las imágenes etiquetadas correspondientes a un nombre de imagen exacto de la siguiente manera:docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
timmins

1
en Windows "grep" no existe (cmd o powershell) Lo siguiente se puede usar en viudasdocker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
Zameer Fouzan

20

docker imagesen realidad usa el primer argumento posicional como un nombre de imagen para filtrar. No se requieren grep ni awk. La -qopción devolverá solo las ID de imágenes coincidentes a las que se puede alimentar docker rmi.

docker rmi --force $(docker images -q 'imagename' | uniq)

Se uniqrequiere para eliminar duplicados, en caso de que tenga la misma imagen etiquetada de manera diferente.


Seguramente esta es la mejor opción en la actualidad. Para mantener la coherencia de la pregunta, el nombre de la imagen debe estar entre comillas.
Colm Bhandal

8

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

sudo docker rmi <docker_image_id> --force

Para hacerlo más inteligente , puede detener cualquier contenedor en ejecución antes de eliminar la imagen:

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

En docker ps, $ 1 es la primera columna, es decir, la identificación del contenedor de la ventana acoplable y $ 3 es la tercera columna, es decir, la identificación de la imagen de la ventana acoplable


5

Encuentro mi respuesta más simple.

Por ejemplo, el nombre de su imagen es python_image.

Entonces tu código debería ser :

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

Espero que esto ayude.


¿Podemos hacer esto para varias imágenes basadas en el nombre comodín?
variable

3

También recibí otra respuesta concisa. El único cambio fue eliminar la -I {}bandera innecesaria .

docker images | grep 'imagename' | xargs docker rmi


3
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`

Esto eliminará todas las imágenes con el nombre "imageName". En algunos casos, esto puede dar un error como "se hace referencia a la imagen en uno o más repositorios". En ese caso, use la eliminación forzada.

docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`

Otra forma puede ser:

docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'

3

Por alguna razón, no pude usar ninguna de las respuestas dadas aquí. Esto es lo que funcionó para mí.

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'es una parte importante. Extrae la identificación de la tercera columna.


3

Para mí funcionó ( Docker versión 19.03.5 ):

docker rmi $(docker images 'imagename' -q)

El comando " docker images 'imagename' -q " enumerará todas las identificaciones de imágenes del único argumento entre comillas, por lo que al concatenarlo con docker rmi (o docker rmi -f para forzar) eliminará todas las imágenes con el nombre seleccionado


1
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )

0

Comentario menor: por lo que estamos experimentando, parece que, desde la ventana acoplable 18.03, ya no puede eliminar imágenes sin etiquetar basándose solo en el nombre. Debe usar el nombre + etiqueta como se indicó anteriormente o usar la identificación.

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

0

docker rmi $(docker images --filter=reference="IMAGENAME:TAG")

por ejemplo si tengo las siguientes imágenes

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
abcdefg/hij                   7.0.0-beta-4.0      3128835950cd        7 days ago          51.4MB
abcdefg/hij-action            7.0.0-beta-4.0      42a7255beb74        7 days ago          97.4MB
abcdefg/hij-test              7.0.0-beta-4.0      17246aed35d0        7 days ago          97.4MB
abcdefg/hij-server            7.0.0-beta-4.0      42c45e561f2c        7 days ago          335MB
abcdefg/hij-init              7.0.0-beta-3.0      f648bb622933        7 days ago          55.2MB
abcdefg/hij-dir               7.0.0-beta-3.0      0db07d3aaccf        7 days ago          97.4MB
abcdefg/hij-mount             7.0.0-beta-3.0      18d1c0e1502c        4 weeks ago         33.7MB

Luego docker rmi $(docker images --filter=reference="abcd*:*4.0")eliminará las primeras cuatro imágenes.

Para obtener más información, consulte https://docs.docker.com/engine/reference/commandline/images/


funciona, pero sería mejor agregar '-q' al comando de imágenes de la docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
ventana

0

Arme una solución a esta pregunta para satisfacer mis necesidades, que no se publicó anteriormente.

Yo quería hacer coincidir las imágenes construidas localmente: library/myappque he cambiado de nombre, Tagged, y empujó a un acuerdo de recompra privada: myrepo.org/library/myapp. Una vez que se presionan, quiero limpiar el registro de Docker local.

Y no me importa si no se encuentra nada o si el comando arroja un error. Así añadido || trueal final para su inclusión en los guiones.

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

0

Según la respuesta de @ Aditya, también puede crear una función bash para eliminar imágenes a gusto. Pon esta función a tu ~/.profile. Cree una nueva sesión de shell o consígala source ~/.profile.

function drmi() {
    docker images | grep $1 |  xargs docker rmi
}

Uso:

drmi golang

0

Informativo:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)

Da este error:

Respuesta de error del demonio: formato de referencia no válido

Probablemente porque mis imágenes se ven así:

hostname:5000/imagename:<none>

Tuve que usar la identificación de la imagen y hacer este comando:

docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`

Para eliminar contenedores salidos:

docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.