¿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

Aditya Singh
fuente

Respuestas:

136

Intente lo siguiente:

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

Windows Powershell:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
Excursionista
fuente
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')
Elton Stoneman
fuente
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')
theoneandonlyak
fuente
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.

udondan
fuente
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

kushalbhattad
fuente
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.

Reamon C. Sumapig
fuente
¿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

Aditya Singh
fuente
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}'
zaman sakib
fuente
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.

Sergeyz
fuente
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

Giuse Petroso
fuente
1
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Michael A.
fuente
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'
Tim Chaubet
fuente
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/

HarryQ
fuente
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
Juan
fuente
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
Halil Kaskavalci
fuente
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`
Martín P.
fuente