web-dev-qa-db-fra.com

Comment supprimer des images Docker basées sur le nom?

Je souhaite supprimer toutes les versions des images de menu fixe avec des noms contenant une chaîne donnée (imagename). 
J'ai essayé le ci-dessous, mais cela ne semble pas fonctionner:

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

42
Aditya Singh

Essayez ce qui suit:

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

Windows Powershell: 

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

Version légèrement plus exacte - greps uniquement sur le nom du référentiel: 

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
30
Elton Stoneman
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
23
Avamore

docker images utilise en fait le premier argument de position comme nom d'image à filtrer. Aucun grep et awk requis. L'option -q renverra uniquement les identifiants d'images correspondants pouvant être transmis à docker rmi.

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

Vous pouvez simplement ajouter --force à la fin de la commande. Comme:

Sudo docker rmi <docker_image_id> --force

Pour le rendre plus intelligent} _, vous pouvez arrêter n'importe quel conteneur en cours d'exécution avant de supprimer l'image:

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

Dans docker ps, $ 1 est la 1ère colonne, c'est-à-dire l'ID du conteneur de menu fixe Et $ 3 est la 3ème colonne, c'est-à-dire l'id de l'image du menu fixe

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

Cela supprimera toutes les images du nom "imageName" . Dans certains cas, cela pourrait donner une erreur du type "l'image est référencée dans un ou plusieurs référentiels". Dans ce cas, utilisez force delete. 

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

Une autre façon peut être: 

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

J'ai aussi une autre réponse concise. La seule modification consistait à supprimer l'indicateur -I {} inutile.

docker images | grep 'imagename' | xargs docker rmi

2
Aditya Singh

Pour une raison quelconque, je n’ai pu utiliser aucune des réponses données ici. Voici ce qui a fonctionné pour moi.

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

awk '{print $3}' est une partie importante. Il extrait l'identifiant de la 3ème colonne.

2
sergeyz

Remarque mineure: .__ D'après ce que nous vivons, il semble que vous ne soyez plus capable, depuis le menu fixe 18.03, de supprimer les images non étiquetées en fonction du nom. Vous devez soit utiliser le nom + balise comme indiqué ci-dessus, soit utiliser l'ID.

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
0
Tim Chaubet
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
0
Michael A.

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

par exemple si j'ai les images suivantes

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

Ensuite, docker rmi $(docker images --filter=reference="abcd*:*4.0") supprimera les quatre premières images.

Pour plus d'informations, veuillez consulter https://docs.docker.com/engine/reference/commandline/images/

0
HarryQ

Mettez en place une solution à cette question pour répondre à mes besoins, qui n’a pas été postée auparavant.

Je voulais faire correspondre les images construites localement: library/myapp que j'ai renommé, étiqueté et poussé vers un référentiel privé: myrepo.org/library/myapp. Une fois qu'ils sont poussés, je veux nettoyer le registre local de docker.

Et je me fiche de savoir si rien n’est trouvé ou si la commande génère une erreur. Ainsi ajouté || true à la fin pour l'inclusion dans les scripts.

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