Docker elimina <ninguno> imágenes TAG


139
root@server:~# docker images -a        
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                  <none>              5e2dfc857e73        5 days ago          261.6 MB
<none>                  <none>              d053e988f23d        5 days ago          261.6 MB
<none>                  <none>              1d5d4a2d89eb        5 days ago          261.6 MB
<none>                  <none>              ea0d189fdb19        5 days ago          100.5 MB
<none>                  <none>              26c6175962b3        5 days ago          100.5 MB
<none>                  <none>              73d5cec4a0b3        5 days ago          100.5 MB
<none>                  <none>              e19590e1bac1        5 days ago          100.5 MB

He intentado lo siguiente:

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

Y lo siguiente:

docker rmi $(docker images -f "dangling=true" -q)

Obtiene el siguiente error:

docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

Es un poco tarde pero tengo que agregar este comentario para otros usuarios. Si usa el símbolo del sistema de Windows, esto no funcionará. Porque el símbolo del sistema no admite funciones internas. Pruebe las líneas exactas con Windows PowerShell
er-han

1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
Ondra Žižka

docker rmi $(docker images | grep "<none>" | awk "{print $3}")
David

5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu

@Karl Morrison: Casi estuviste allí: simplemente perdiste -a (--todos) en docker images:)
mirekphd

Respuestas:


203

Puede probar y enumerar solo las imágenes sin etiquetar (aquellas sin etiquetas o con etiqueta sin etiqueta):

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'

Sin embargo, es posible que otras personas necesiten algunas de esas imágenes sin etiquetar.

Prefiero eliminar solo las imágenes colgantes :

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Como mencioné para docker 1.13+ en septiembre de 2016 en " Cómo eliminar imágenes de Docker antiguas y no utilizadas ", también puede hacer el image prunecomando :

docker image prune

Dicho esto, Janaka Bandara menciona en los comentarios :

Esto hizo no eliminar <none>imágenes-etiquetados para mí (por ejemplo foo/bar:<none>); Tuve que usar docker images --digestsydocker rmi foo/bar@<digest>

Janaka hace referencia a " Cómo eliminar una imagen firmada con una etiqueta " de Paul V. Novarese :

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              459769dbc7a1        5 days ago          4.461 MB

Pasos diagnósticos

Puede ver la diferencia en estas dos entradas si usa la --digests=trueopción (la entrada sin etiquetar tiene el resumen de la firma de Docker Content Trust):

# docker images --digests=true
REPOSITORY               TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              <none>                                                                    459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00   459769dbc7a1        5 days ago     

Tenga en cuenta que Paul también menciona el número 18892 de Moby :

Después de extraer una imagen firmada, hay una entrada "extra" (con etiqueta <none>) en la docker imagessalida " ".
Esto dificulta rmila imagen (debe forzarla o, de lo contrario, primero elimine la entrada etiquetada correctamente o elimine por resumen.


6
Esto no me <none>quitó las imágenes etiquetadas (p foo/bar:<none>. Ej. ); Tuve que usar docker images --digestsy docker rmi foo/bar@<digest>como se describe en success.docker.com/KBase/…
Janaka Bandara

1
@JanakaBandara Gracias. He incluido su comentario en la respuesta (con algunos enlaces adicionales)
VonC

para mísudo docker rmi $(docker images --filter "dangling=true" -q --no-trunc) Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/json?filters=%7B%22dangling%22%3A%7B%22true%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied "docker rmi" requires at least 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] [flags] Remove one or more images
Jamie Hutber

@JamieHutber "docker rmi" requiere al menos 1 argumento. Eso sugiere que las imágenes de la ventana acoplable --filter "colgando = verdadero" -q --no-trunc no devuelve nada, lo que significa que no hay imágenes colgantes.
VonC

Gracias VonC en realidad no lo hacehutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
Jamie Hutber

43
docker images | grep none | awk '{ print $3; }' | xargs docker rmi

Puedes probar esto simplemente


1
La solución más rápida y fácil para mí
Mark

Tienes que agregar --forceal final. Entonces el comando se verá como- docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh

23

imagen de docker poda elimina todas las imágenes colgantes (aquellas sin etiqueta). docker image prune -a también eliminaría las imágenes que no tengan un contenedor que las use.

La diferencia entre imágenes colgantes y no utilizadas se explica en este hilo de stackoverflow .


6

Puedes irte docker rmi $(docker images -f "dangling=true" -q). Consulte la documentación de imágenes para obtener más opciones.

$ docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              94870cda569b        4 seconds ago       673MB
python                      2.7                 320a06f42b5f        10 days ago         673MB
mysql                       latest              e799c7f9ae9c        2 months ago        407MB
gcavalcante8808/semaphore   latest              86e863e11461        2 months ago        537MB
redis                       latest              e32ef7250bc1        2 months ago        184MB
rabbitmq                    3.6.9-management    7e69e14cc496        2 months ago        179MB
rabbitmq                    3.6.9               eb2e4968538a        2 months ago        179MB
jordan/rundeck              latest              6d40b57b1572        2 months ago        660MB
rabbitmq                    3.5.6-management    dbfe8d18809a        19 months ago       304MB

$ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6

5

De acuerdo con la documentación de la ventana acoplable, solo puede enumerar imágenes sin etiquetar (colgantes) con

$ docker images -f "dangling=true"

y redirigirlos a un docker rmicomando así:

$ docker rmi $(docker images -f "dangling=true" -q) --force

Observe que el -qparámetro que solo muestra los ID numéricos de los contenedores.


1
¿No es similar a lo que propuse en mi respuesta en 2015?
VonC

5

Puede comprobar si el filtro 'colgando' ya no funciona

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

Utilice la poda del sistema Docker para eliminar las imágenes colgantes

$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N]

Puede utilizar --forcepara no solicitar confirmación

$ docker system prune --force

5

Simplemente ejecute este comando:

docker image prune --filter="dangling=true"

4

Lo he encontrado docker image prune -fmás útil y lo uso todo el tiempo durante mi trabajo diario, el uso de la etiqueta -fno solicitará confirmación. Más detalles aquí


3

Elimine las imágenes que tienen nonecomo nombre de repositorio usando lo siguiente:

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

Elimina las imágenes que tienen noneetiqueta o nombre de repositorio:

docker rmi $(docker images | grep "none" | awk '{print $3}')


2

docker system prune hará el truco, elimina

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

¡Pero utilícelo, con la precaución!


2

Para eliminar todas las imágenes con nonetenemos que asegurarnos de que eliminamos todos los contenedores detenidos que pueden usar ejecutar:

docker rm $(docker ps -a -q)

luego podemos eliminar todas las imágenes:

docker image prune


1

El siguiente comando me funciona. esto es simplemente imágenes grep "" y obtener la identificación de la imagen de la ventana acoplable y eliminar todas las imágenes. Un solo comando simple como debe ser.

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


1

Esta es una extensión de la respuesta de tansadio:

Si recibe el siguiente error:

Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>

Puedes forzarlo con --force:

docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force

1

Lo siguiente eliminará todas las <none>imágenes.

docker rmi $(docker images | grep none | awk '{print $3}')

Puede forzar la eliminación cambiando docker rmia, docker rmi -faunque no recomiendo hacerlo.

Algunas de las <none>imágenes podrían estar relacionadas con otras imágenes, así que para estar seguro, no use -fetiquetas.


0

Es simple y claro,

Incluso me tomó 3 días entender este simple y nítido error.

La imagen de la ventana acoplable no se ha creado correctamente

Step 7/13 : COPY jupyter_notebook_config.py /root/.jupyter/
 ---> bf29ce6fe6dc
Step 8/13 : COPY notebooks /notebooks
COPY failed: stat /var/lib/docker/tmp/docker-builder776981166/notebooks: no such file or directory
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              bf29ce6fe6dc        9 seconds ago       1.27GB
ubuntu              16.04               a51debf7e1eb        3 weeks ago         116MB

Luego eliminé la octava línea de Dockerfile, esta vez fue una señal de éxito.

Successfully built b6724370f8ca
Successfully tagged dem:expo
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker run -it -p 8888:8888 dem:expo
[I 06:11:38.984 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:11:39.011 NotebookApp] Serving notebooks from local directory: /
[I 06:11:39.011 NotebookApp] The Jupyter Notebook is running at:
[I 06:11:39.011 NotebookApp] http://(296d81166725 or 127.0.0.1):8888/?token=496feb282ef749c05277ef57a51e8a56fedb1c6b337b9f92

Dice dem: expo etiquetado con éxito, esta línea es imp durante el proceso de la ventana acoplable.


0

docker rmi -f $ (imágenes de docker -a | awk 'NR> 1 && $ 2 == "" {imprimir $ 3}')


0

Todas

Compartir el comando de PowerShell para los amantes de Windows (en caso de que no tenga bash, grep o awk)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}


0

Retire todos los contenedores salidos

docker rm $(docker container ls -a -f status=exited -q)

o retire los contenedores de acuerdo con un patrón

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

0

intente esto para ver la lista de imágenes de Docker ID con etiqueta <none>

docker images -a | awk '/^<none>/ {print $3}'

y luego puede eliminar todas las imágenes con etiqueta <none>. esto funcionó para mí.

docker rmi $(docker images -a | awk '/^<none>/ {print $3}')

0

100% funciona: imágenes de la ventana acoplable | grep none | awk '{print $ 3}' | xargs docker rmi -f


-1

tratar

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , aunque puede haber comandos más limpios

Actualizado


1
Eso también eliminará las imágenes que no están etiquetadas como <ninguno>, lo cual es un gran nono.
K - La toxicidad en SO está aumentando.

He actualizado mi respuesta
user2915097

¡El comando docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}no hace nada!
K - La toxicidad en SO está aumentando.

-1

Simplemente elimine las imágenes usando sus ID:

# docker rmi 5e2dfc857e73 d053e988f23d ...

-2

Las imágenes colgantes son fantasmas de las compilaciones y extracciones anteriores, simplemente elimínelas con: docker rmi $ (docker images -f "dangling = true" -q)


El OP afirma que ya intentó este comando exacto pero falló. Además, esta respuesta ya se ha dado al menos dos veces.
CaringDev

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.