Je souhaite supprimer toutes les versions des images docker dont les noms contiennent une chaîne donnée ( imagename
).
J'ai essayé ce qui suit, mais cela ne semble pas fonctionner:
docker images | grep 'imagename' | xargs -I {} docker rmi
Je souhaite supprimer toutes les versions des images docker dont les noms contiennent une chaîne donnée ( imagename
).
J'ai essayé ce qui suit, mais cela ne semble pas fonctionner:
docker images | grep 'imagename' | xargs -I {} docker rmi
Réponses:
Essayez ce qui suit:
docker rmi $(docker images |grep 'imagename')
Windows PowerShell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Version légèrement plus exacte - grepping uniquement sur le nom du référentiel:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
filtre la sortie afin que seuls repo et tag soient affichés (ie foo:latest
). grep 'imagename
filtre ces lignes uniquement sur les images qui contiennent imagename
. Mettre cela dans $()
évalue cela et passe à l'extérieur docker rmi
qui supprime les images qui correspondent.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
utilise en fait le premier argument de position comme nom d'image à filtrer. Aucun grep et awk requis. L' -q
option renverra uniquement les identifiants d'images correspondants qui peuvent être alimentés docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
Le uniq
est nécessaire pour supprimer les doublons, au cas où vous auriez la même image étiquetée différemment.
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 tout 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'identifiant du conteneur Docker et $ 3 est la 3ème colonne, c'est-à-dire l'identifiant de l'image docker
Je trouve ma réponse plus simple.
Exemple, le nom de votre image est python_image
.
Ensuite, votre code devrait être :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
J'espère que ça aide.
J'ai également eu une autre réponse concise. Le seul changement a été de supprimer l' -I {}
indicateur inutile .
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Cela supprimera toutes les images du nom "imageName". Dans certains cas, cela peut donner une erreur comme "l'image est référencée dans un ou plusieurs référentiels". Dans ce cas, utilisez la suppression forcée.
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}'
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'id de la 3ème colonne.
Pour moi travaillé ( Docker version 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
La commande " docker images 'imagename' -q " listera toutes les images id de l'argument guillemet simple, donc en le concaténant avec docker rmi (ou docker rmi -f pour forcer), il supprimera toutes les images avec le nom sélectionné
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Remarque mineure: d'après ce que nous vivons, il semble que vous ne soyez plus en mesure de supprimer les images non marquées en fonction du nom depuis le docker 18.03. Vous devez soit utiliser le nom + étiquette comme indiqué ci-dessus, soit utiliser l'ID.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
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
Puis 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/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Mettre en place une solution à cette question pour répondre à mes besoins, qui n'a pas été publiée auparavant.
Je voulais faire correspondre les images construites localement: library/myapp
que je l' ai renommé, tagged, et poussé à une prise en pension privé: myrepo.org/library/myapp
. Une fois qu'ils sont poussés, je veux nettoyer le registre local des dockers.
Et je m'en fiche si rien n'est trouvé ou si la commande génère une erreur. Ainsi ajouté || true
à la fin pour inclusion dans les scripts.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Sur la base de la réponse de @ Aditya, vous pouvez également créer une fonction bash pour supprimer les images à l'aise. Mettez cette fonction dans votre ~/.profile
. Créez une nouvelle session shell ou créez-la par source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Usage:
drmi golang
Informatif:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
Donnez cette erreur:
Réponse d'erreur du démon: format de référence non valide
Probablement parce que mes images ressemblent à ceci:
hostname:5000/imagename:<none>
J'ai dû utiliser l'identifiant de l'image et faire cette commande:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
Pour supprimer les conteneurs sortis:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`