Ich möchte alle Versionen von Docker-Bildern mit Namen löschen, die eine bestimmte Zeichenfolge ( imagename
) enthalten.
Ich habe das Folgende versucht, aber es scheint nicht zu funktionieren:
docker images | grep 'imagename' | xargs -I {} docker rmi
docker images |grep 'imagename'
Etwas genauere Version - greift nur nach dem Repository-Namen:
quelle
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
quelle
docker images --format '{{.Repository}}:{{.Tag}}
filtert die Ausgabe so, dass nur Repo & Tag angezeigt werden (dhfoo:latest
).grep 'imagename
filtert diese Zeilen nur nach den Bildern, die sie enthaltenimagename
. Wenn Sie das eingeben, wird$()
das & ausgewertet und an das Äußere übergeben,docker rmi
wodurch die übereinstimmenden Bilder entfernt werden.docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
Verwendet tatsächlich das erste Positionsargument als Bildnamen, nach dem gefiltert werden soll. Keine grep's und awk's erforderlich. Die-q
Option gibt nur die übereinstimmenden Bild-IDs zurück, die eingegeben werden könnendocker rmi
.Das
uniq
ist erforderlich, um Duplikate zu entfernen, falls Sie dasselbe Bild unterschiedlich markiert haben.quelle
Sie können einfach
--force
am Ende des Befehls hinzufügen . Mögen:sudo docker rmi <docker_image_id> --force
Um es intelligenter zu machen, können Sie jeden laufenden Container stoppen, bevor Sie das Image entfernen:
In
docker ps
ist $ 1 die 1. Spalte, dh Docker-Container-ID, und $ 3 ist die 3. Spalte, dh Docker-Image-IDquelle
Ich finde meine Antwort einfacher.
Beispiel: Ihr Bildname ist
python_image
.Dann sollte Ihr Code sein :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Ich hoffe das hilft.
quelle
Ich habe auch eine andere prägnante Antwort bekommen. Die einzige Änderung bestand darin, das unnötige
-I {}
Flag zu entfernen .docker images | grep 'imagename' | xargs docker rmi
quelle
Dadurch werden alle Bilder mit dem Namen "imageName" entfernt. In einigen Fällen kann dies zu einem Fehler führen, z. B. "Bild wird in einem oder mehreren Repositorys referenziert". Verwenden Sie in diesem Fall das Löschen erzwingen.
Ein anderer Weg kann sein:
quelle
Für mich hat funktioniert ( Docker Version 19.03.5 ):
Der Befehl " Docker-Bilder 'Bildname' -q " listet alle Bild-IDs des einfach in Anführungszeichen gesetzten Arguments auf. Wenn Sie es also mit Docker-Rmi (oder Docker-Rmi -f zum Erzwingen) verknüpfen , werden alle Bilder mit dem ausgewählten Namen entfernt
quelle
Aus irgendeinem Grund konnte ich hier keine der gegebenen Antworten verwenden. Folgendes hat bei mir funktioniert.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
ist ein wichtiger Teil. Es extrahiert die ID aus der 3. Spalte.quelle
quelle
Kleinere Bemerkung: Nach dem, was wir erleben, scheinen Sie - seit Docker 18.03 - nicht mehr in der Lage zu sein, Bilder ohne Tags zu entfernen, die nur auf dem Namen basieren. Sie müssen entweder den Namen + Tag wie oben angegeben verwenden oder die ID verwenden.
quelle
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
Zum Beispiel, wenn ich die folgenden Bilder habe
Dann
docker rmi $(docker images --filter=reference="abcd*:*4.0")
werden die ersten vier Bilder entfernt.Weitere Informationen finden Sie unter https://docs.docker.com/engine/reference/commandline/images/
quelle
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Stellen Sie eine Lösung für diese Frage zusammen, um meine Anforderungen zu erfüllen, die zuvor noch nicht veröffentlicht wurde.
Ich wollte lokal erstellte Bilder abgleichen:
library/myapp
die ich umbenannt, markiert und in ein privates Repo verschoben habe :myrepo.org/library/myapp
. Sobald sie gepusht sind, möchte ich die lokale Docker-Registrierung bereinigen.Und es ist mir egal, ob nichts gefunden wird oder der Befehl einen Fehler auslöst. So
|| true
am Ende zur Aufnahme in Skripte hinzugefügt .quelle
Basierend auf der Antwort von @ Aditya können Sie auch eine Bash-Funktion erstellen, um Bilder bequem zu entfernen. Stellen Sie diese Funktion auf Ihre
~/.profile
. Erstellen Sie eine neue Shell-Sitzung oder beziehen Sie sie vonsource ~/.profile
.Verwendung:
quelle
Information:
Geben Sie diesen Fehler ein:
Wahrscheinlich, weil meine Bilder so aussehen:
Ich musste die Bild-ID verwenden und diesen Befehl ausführen:
So entfernen Sie verlassene Container:
quelle