Derzeit können Sie die Registrierungs-API für diese Aufgabe nicht verwenden. Sie können nur ein Repository oder ein bestimmtes Tag löschen.
Im Allgemeinen bedeutet das Löschen eines Repositorys, dass alle diesem Repo zugeordneten Tags gelöscht werden.
Das Löschen eines Tags bedeutet, dass die Zuordnung zwischen einem Bild und einem Tag gelöscht wird.
Keines der oben genannten Elemente löscht ein einzelnes Bild. Sie verbleiben auf Ihrer Festplatte.
Problemumgehung
Für diese Problemumgehung müssen Ihre Docker-Images lokal gespeichert sein.
Eine Problemumgehung für Ihre Lösung besteht darin, alle bis auf die neuesten Tags zu löschen und dadurch möglicherweise den Verweis auf die zugehörigen Bilder zu entfernen. Anschließend können Sie dieses Skript ausführen , um alle Bilder zu entfernen, auf die von keinem Tag oder der Abstammung eines verwendeten Bildes verwiesen wird.
Terminologie (Bilder und Tags)
Betrachten wir ein Bild Graph wie dieser , wo die Großbuchstaben ( A
, B
, ...) Kurz Bild - IDs und stellen <-
bedeutet , dass ein Bild auf ein anderes Bild basiert:
A <- B <- C <- D
Jetzt fügen wir dem Bild Tags hinzu:
A <- B <- C <- D
| |
| <version2>
<version1>
Hier wird der Tag <version1>
verweist auf das Bild C
und den Tag <version2>
verweist auf das Bild D
.
Verfeinern Sie Ihre Frage
In Ihrer Frage sagten Sie, dass Sie entfernen wollten
alle Bilder außer dem latest
. Diese Terminologie ist nicht ganz richtig. Sie haben Bilder und Tags gemischt. Wenn Sie sich die Grafik ansehen, stimmen Sie zu, dass das Tag <version2>
die neueste Version darstellt. In der Tat können Sie gemäß dieser Frage ein Tag haben, das die neueste Version darstellt:
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
Da das <latest>
Tag auf das Bild verweist, D
frage ich Sie: Wollen Sie wirklich alle außer dem Bild löschen D
? Wahrscheinlich nicht!
Was passiert, wenn Sie ein Tag löschen?
Wenn Sie das Tag <version1>
mit der Docker REST-API löschen, erhalten Sie Folgendes :
A <- B <- C <- D
|
<version2>
<latest>
Denken Sie daran: Docker löscht niemals ein Bild! Selbst wenn dies der Fall ist, kann in diesem Fall kein Bild gelöscht werden, da das Bild C
Teil der Abstammung für D
das mit Tags versehene Bild ist.
Selbst wenn Sie dieses Skript verwenden , wird kein Bild gelöscht.
Wenn ein Bild gelöscht werden kann
Unter der Bedingung, dass Sie steuern können, wann jemand Ihre Registrierung abrufen oder verschieben kann (z. B. durch Deaktivieren der REST-Schnittstelle). Sie können ein Bild aus einem Bilddiagramm löschen, wenn kein anderes Bild darauf basiert und kein Tag darauf verweist.
Beachten Sie, dass in der folgenden Grafik, das Bild D
wird nicht auf der Grundlage , C
sondern auf B
. Daher D
hängt nicht davon ab C
. Wenn Sie ein Tag <version1>
in diesem Diagramm löschen , wird das Bild C
von keinem Bild verwendet, und dieses Skript kann es entfernen.
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
Nach der Bereinigung sieht Ihr Bilddiagramm folgendermaßen aus:
A <- B <- D
|
<version2>
<latest>
Ist das was du willst?