Docker supprime les images TAG <aucune>

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

J'ai essayé ce qui suit:

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

Et ce qui suit:

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

Obtenez l'erreur suivante:

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

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

Remove one or more images
K - La toxicité du SO augmente.
la source
Il est un peu tard mais je dois ajouter ce commentaire pour les autres utilisateurs. Si vous utilisez l'invite de commande Windows, cela ne fonctionnera pas. Parce que l'invite de commande ne prend pas en charge les fonctions internes. Essayez les lignes exactes avec 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 le
5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu
@Karl Morrison: Vous y étiez presque: il vient de manquer -a (--all) in docker images:)
mirekphd

Réponses:

203

Vous pouvez essayer de répertorier uniquement les images non balisées (celles sans étiquette ou avec étiquette sans étiquette):

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

Cependant, certaines de ces images non étiquetées peuvent être nécessaires à d'autres.

Je préfère ne supprimer que les images pendantes :

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

Comme je l'ai mentionné pour docker 1.13+ en septembre 2016 dans " Comment supprimer des images Docker anciennes et inutilisées ", vous pouvez également exécuter la image prunecommande :

docker image prune

Cela étant dit, Janaka Bandara mentionne dans les commentaires :

Cela n'a pas supprimé les <none>images marquées pour moi (par exemple foo/bar:<none>); Je devais utiliser docker images --digestsetdocker rmi foo/bar@<digest>

Janaka fait référence à " Comment supprimer une image signée avec une balise " 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

Étapes de diagnostic

Vous pouvez voir la différence entre ces deux entrées si vous utilisez l' --digests=trueoption (l'entrée non balisée a le condensé de signature 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     

Notez que Paul mentionne également moby issue 18892 :

Après avoir extrait une image signée, il y a une entrée "supplémentaire" (avec étiquette <none>) dans la docker imagessortie " ".
Cela rend rmil'image difficile (vous devez la forcer, ou bien d'abord supprimer l'entrée correctement balisée, ou supprimer par résumé.

VonC
la source
6
Cela n'a pas supprimé les <none>images marquées pour moi (par exemple foo/bar:<none>); J'ai dû utiliser docker images --digestset docker rmi foo/bar@<digest>comme décrit à success.docker.com/KBase/…
Janaka Bandara
1
@JanakaBandara Merci. J'ai inclus votre commentaire dans la réponse (avec quelques liens supplémentaires)
VonC
for mesudo 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" nécessite au moins 1 argument. Cela suggère des images de docker --filter "dangling = true" -q --no-trunc ne renvoie rien, ce qui signifie qu'il n'y a pas d'images pendantes?
VonC
Merci VonC en fait, ce n'est pas le cashutber@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

Vous pouvez essayer ceci simplement

tansadio
la source
1
Solution la plus rapide et la plus simple pour moi
Mark
Faut ajouter --forceà la fin. Donc, la commande ressemblera à docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh
23

docker image prune supprime toutes les images pendantes (celles avec la balise aucune). docker image prune -a supprimerait également toutes les images qui n'ont pas de conteneur qui les utilise.

La différence entre les images pendantes et inutilisées est expliquée dans ce thread stackoverflow .

herm
la source
6

Vous pouvez y aller docker rmi $(docker images -f "dangling=true" -q). Voir la documentation des images pour plus d'options.

$ 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
GHETTO.CHiLD
la source
5

Selon la documentation de docker, vous ne pouvez lister que les images non marquées (pendantes) avec

$ docker images -f "dangling=true"

et redirigez-les vers la docker rmicommande comme ça:

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

Remarquez que le -qparamètre affiche uniquement les ID numériques des conteneurs.

OzzyCzech
la source
1
N'est-ce pas similaire à ce que j'ai proposé dans ma réponse en 2015?
VonC
5

Vous pouvez vérifier si le filtre «pendant» ne fonctionne plus

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

Utilisez le système docker prune pour supprimer les images pendantes

$ 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]

Vous pouvez utiliser --forcepour ne pas demander de confirmation

$ docker system prune --force
Chetabahana
la source
5

Exécutez simplement cette commande:

docker image prune --filter="dangling=true"
Ragnar
la source
4

J'ai trouvé le docker image prune -fplus utile et je l'utilise tout le temps pendant mon travail quotidien, l'utilisation de la balise -fne demandera pas de confirmation. Plus de détails ici

Justjais
la source
3

Supprimez les images dont nonele nom de référentiel est le suivant:

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

Supprimez les images qui ont un nom de nonebalise ou de référentiel:

docker rmi $(docker images | grep "none" | awk '{print $3}')
Jérôme Anthony
la source
3
docker rmi --force $(docker images -q --filter "dangling=true")
Rafaf Tahsin
la source
2

docker system prune fera l'affaire, il supprime

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

Mais utilisez-le, avec prudence!

Rajath
la source
2

Pour supprimer toutes les images avec, nonenous devons nous assurer que nous avons supprimé tous les conteneurs arrêtés qu'ils peuvent utiliser run:

docker rm $(docker ps -a -q)

alors nous pouvons supprimer toutes les images:

docker image prune
yevgeniy
la source
1

Pour supprimer les images pendantes, utilisez:

docker image rm $(docker images --format "{{.ID}}" --filter "dangling=true")

Veuillez vous référer à ma réponse ici pour une description plus détaillée: https://unix.stackexchange.com/a/445664/292327

Aditya Satyavada
la source
1

La commande ci-dessous fonctionne pour moi. ce ne sont que de simples images grep "" et obtenir l'identifiant de l'image docker et supprimer toutes les images. Commande unique simple comme il se doit.

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

Jogendra Kumar
la source
1

Ceci est une extension de la réponse de tansadio:

Si vous obtenez l'erreur suivante:

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

Vous pouvez le forcer avec --force:

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

Le suivi supprimera toutes les <none>images

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

Vous pouvez forcer la suppression en passant docker rmià docker rmi -fbien que je ne recommande pas de le faire.

Certaines <none>images peuvent être liées à d'autres images, donc pour être sûr de ne pas utiliser de -fbalise.

nPcomp
la source
0

C'est simple et clair,

Même j'ai pris 3 jours pour comprendre cette erreur simple et nette.

L'image du docker n'est pas créée avec succès

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

Ensuite, j'ai supprimé la 8ème ligne de Dockerfile, c'était le succès du signal cette fois.

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

Il dit avec succès étiqueté dem: expo, cette ligne est imp pendant le processus de docker.

L'Exorciste
la source
0

docker rmi -f $ (images docker -a | awk 'NR> 1 && $ 2 == "" {print $ 3}')

iamfaith
la source
0

Tout

Partage de la commande PowerShell pour les amateurs de Windows (juste au cas où vous n'auriez pas bash, grep ou awk)

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

Exécutez la commande suivante pour supprimer les images avec docker rmi

docker images --filter "dangling=true"      
Jatinder Dhaliwal
la source
0

Supprimer tous les conteneurs sortis

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

ou retirez les contenants selon un modèle

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Elton Sandré
la source
0

essayez ceci pour voir l'ID des images de docker de liste avec l'étiquette <none>

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

puis vous pouvez supprimer toutes les images avec balise <none>. cela a fonctionné pour moi.

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

100% fonctionne: images docker | grep none | awk '{print $ 3}' | xargs docker rmi -f

sudhir tataraju
la source
-1

essayer

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , alors qu'il peut y avoir des commandes plus propres

Actualisé

user2915097
la source
1
Cela supprimera également les images qui ne sont pas marquées <aucun>, ce qui est un gros nono.
K - La toxicité du SO augmente.
J'ai mis à jour ma réponse
user2915097
La commande docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}ne fait rien!
K - La toxicité du SO augmente.
-1

Supprimez simplement les images en utilisant leurs identifiants:

# docker rmi 5e2dfc857e73 d053e988f23d ...
Daniel Borges
la source
-2

Les images pendantes sont des fantômes des versions précédentes, supprimez-les simplement avec: docker rmi $ (docker images -f "dangling = true" -q)

Nathan Borik
la source
L'OP déclare qu'il a déjà essayé cette commande exacte mais qu'elle a échoué. De plus, cette réponse a déjà été donnée au moins deux fois.
CaringDev
-5
docker rmi $(docker images -a -q)

A indiqué les images suivantes lorsqu'elles sont utilisées. Je pense que cette commande supprime les images indésirables.

K - La toxicité du SO augmente.
la source
2
cela ne supprime-t-il pas toutes les images?
marianobianchi
3
cela supprime toutes les images inutilisées et il ne doit pas être marqué comme la bonne réponse.
Ghashange