Ich versuche ein Bild zu entfernen und erhalte:
# docker rmi f50f9524513f
Failed to remove image (f50f9524513f): Error response from daemon: conflict: unable to delete f50f9524513f (cannot be forced) - image has dependent child images
Dies ist die Docker-Version:
# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Es gibt jedoch keine zusätzlichen Informationen:
# docker images --format="raw" | grep f50f9524513f -C3
repository: debian
tag: 8
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
repository: debian
tag: jessie
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
Wie kann ich das bekommen abhängigen Kinderbilder erhalten? es angeblich hat?
Es gibt keine laufenden oder gestoppten Container mit dieser Image-ID.
linux
docker
containers
Nicocesar
quelle
quelle
Antworten:
Kurze Antwort: Hier ist ein Python3-Skript , das abhängige Docker-Bilder auflistet.
Lange Antwort: Sie können die Bild-ID und die übergeordnete ID für alle nach dem betreffenden Bild erstellten Bilder wie folgt anzeigen:
Sie sollten in der Lage sein, nach Bildern mit der übergeordneten ID zu suchen, die mit f50f9524513f beginnen, und dann nach untergeordneten Bildern von suchen diesen usw. zu . Aber das
.Parent
ist nicht das, was Sie denken. In den meisten Fällen müssten Siedocker images --all
oben angeben , damit dies funktioniert. Dann erhalten Sie auch Bild-IDs für alle Zwischenebenen.Hier ist ein eingeschränkteres Python3-Skript, mit dem Sie die Docker-Ausgabe analysieren und nach der Liste der Bilder suchen können:
Wenn Sie dies speichern, können
desc.py
Sie es wie folgt aufrufen:Oder verwenden Sie einfach das Wesentliche oben , das das Gleiche tut.
quelle
Wenn Sie nicht viele Bilder haben, gibt es immer den Brute-Force-Ansatz:
quelle
echo $1
passiert, indem Sie das auf das hässlichere (aber immer noch brutale) änderndocker images | grep $i
(tragbarer in Docker-Versionen als die Verwendung von--filter
Flags für die Image -ID )Installieren Sie dockviz und folgen Sie den Zweigen der Image-ID in der Baumansicht:
quelle
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
.brew install dockviz
Ich habe eine Übersicht mit einem Shell-Skript erstellt, um den Nachkommenbaum eines Docker-Bildes auszudrucken, falls jemand an einer Bash-Lösung interessiert sein sollte:
quelle
Dies ist, was ich getan habe, um mein endgültiges "Image" zu erhalten (Ebene, wirklich - was mich abschreckte, als ich gerade in Docker-Builds bin).
Ich bekam die ganze Nachricht "... kann nicht gezwungen werden ...". Mir wurde klar, dass ich die Bilder, die ich nicht benötigte, nicht löschen konnte, da es sich nicht wirklich um unabhängige Bilder handelt, die mit 'Docker Commit' erstellt wurden. Mein Problem war, dass ich mehrere Bilder (oder Ebenen) zwischen dem Basisbild und meinem endgültigen Bild hatte. Beim Versuch, aufzuräumen, bin ich auf den Fehler / die Warnung bezüglich des Kindes und des Elternteils gestoßen.
docker image load -i FinalImage.tar.gz
. Die Ausgabe war so etwas wie:Geladene Bild-ID: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Wenn ich jetzt mit 'Docker-Bild ls' aufliste, habe ich nur das ursprüngliche Basisbild und das endgültige Bild, das ich zuvor auf einem Tarball gespeichert habe.
Mein System ist jetzt "sauber". Ich habe nur die Bilder, die ich will. Ich habe sogar das Basis-Image ohne Probleme gelöscht.
quelle
Basierend auf den Antworten von Slushy und Michael Hoffman können Sie diese Shell-Funktion verwenden, wenn Sie nicht viele Bilder haben:
und nenne es dann mit
quelle
Hier ist eine Lösung, die auf der Python-API (
pip install docker
) basiert und Nachkommen rekursiv zusammen mit ihren Tags (falls vorhanden) auflistet, wobei der Einzug entsprechend der Tiefe der Beziehung (Kinder, Enkelkinder usw.) erhöht wird:Beispiel:
Ich habe es als Zusammenfassung unter https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57 zur Verfügung gestellt
quelle
Hier ist eine einfache Möglichkeit, eine Liste von untergeordneten Bildern abzurufen, die von einem übergeordneten Bild abhängig sind:
Dadurch wird beispielsweise eine Liste mit IDs für untergeordnete / übergeordnete Bilder generiert (der Kürze halber abgeschnitten):
Die linke Seite ist die untergeordnete Bild-ID, die rechte Seite ist die übergeordnete Bild-ID, die wir löschen möchten, aber es heißt "Bild hat abhängige untergeordnete Bilder". Dies sagt uns, dass dies
abcdefghijkl
das Kind ist, von dem abhängig ist123456789012
. Also müssen wir zuerstdocker rmi abcdefghijkl
, dann können Siedocker rmi 123456789012
.Jetzt kann es eine Kette von abhängigen untergeordneten Bildern geben, sodass Sie möglicherweise immer wieder wiederholen müssen, um das letzte Kind zu finden.
quelle
Sie können Docker-Bilder unabhängig von der Beziehung zwischen Eltern und Kind über das folgende Docker-Verzeichnis löschen
In diesem Verzeichnis finden Sie Docker-Bilder, mit denen Sie löschen können, was Sie möchten.
quelle
/var/lib/docker
direkt von HandWie wäre es mit:
Es werden die untergeordneten Bild-IDs mit dem
sha256:
Präfix gedruckt .Ich hatte auch folgendes, das die Namen anfügt:
ID=
Ruft die vollständige ID des Bildes abIMAGES=
Ruft alle untergeordneten Bilder ab, für die dieses Bild als aufgeführt istImage
echo...
Entfernt Duplikate und gibt die Ergebnisse wiederquelle
Ich habe mir das ausgedacht, um rekursiv Kinder und ihre Repo-Tags zu finden und auszudrucken, was sie tun:
Vergessen Sie nicht, / tmp / dii- * zu löschen, wenn Ihr Host nicht sicher ist.
quelle
Ich stand auch vor dem gleichen Problem. Im Folgenden finden Sie die folgenden Schritte, um das Problem zu beheben.
Stoppen Sie alle laufenden Container
Docker Stop $ (Docker ps -aq) Entfernen Sie alle Container
Docker rm $ (Docker ps -aq) Entfernen Sie alle Bilder
Docker rmi $ (Docker-Bilder -q)
quelle