J'essaye de supprimer une image et j'obtiens:
# 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
Voici la version docker:
# 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
mais il n'y a pas d'informations supplémentaires:
# 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
Comment puis-je obtenir les images d'enfants à charge qu'il prétend avoir?
il n'y a aucun conteneur en cours d'exécution ou arrêté avec cet identifiant d'image.
linux
docker
containers
Nicocésar
la source
la source
Réponses:
Réponse courte: Voici un script python3 qui répertorie les images docker dépendantes.
Réponse longue: Vous pouvez voir l'ID d'image et l'ID parent pour toutes les images créées après l'image en question avec les éléments suivants:
Vous devriez pouvoir rechercher des images avec un identifiant parent commençant par f50f9524513f, puis rechercher des images enfants de celles-ci , etc. Mais ce
.Parent
n'est pas ce que vous pensez. , donc dans la plupart des cas, vous devrez spécifierdocker images --all
ci-dessus pour que cela fonctionne, vous obtiendrez également des identifiants d'image pour toutes les couches intermédiaires.Voici un script python3 plus limité pour analyser la sortie du docker et effectuer la recherche pour générer la liste des images:
Si vous enregistrez ceci comme
desc.py
vous pouvez l'invoquer comme suit:Ou utilisez simplement l'essentiel ci - dessus , qui fait la même chose.
la source
Si vous n'avez pas un grand nombre d'images, il y a toujours l'approche de la force brute:
la source
echo $1
en le plus laid (mais toujours brutal-forcy)docker images | grep $i
(plus portable dans les versions docker que d'utiliser des--filter
indicateurs pour l'ID d'image)Installez dockviz et suivez les branches à partir de l'ID d'image dans l'arborescence:
la source
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
abord.brew install dockviz
J'ai créé un résumé avec un script shell pour imprimer l'arbre descendant d'une image docker, si quelqu'un est intéressé par la solution bash:
la source
C'est ce que j'ai fait afin de préserver mon "image" finale (couche, vraiment - ce qui m'a dérangé, car je suis juste en train d'entrer dans les builds de docker).
Je recevais tout le message "... ne peut pas être forcé ...". J'ai réalisé que je ne pouvais pas supprimer les images dont je n'avais pas besoin car ce ne sont pas vraiment des images indépendantes créées par 'docker commit'. Mon problème était que j'avais plusieurs images (ou calques) entre l'image de base et ma finale, et le simple fait d'essayer de nettoyer est l'endroit où j'ai rencontré l'erreur / l'avertissement concernant l'enfant et le parent.
docker image load -i FinalImage.tar.gz
. La sortie était quelque chose comme:ID de l'image chargée: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Maintenant, lorsque je liste avec 'docker image ls', je n'ai que l'image de base d'origine et l'image finale que j'ai précédemment enregistrée dans une archive tar.
Mon système est maintenant «propre». Je n'ai que les images que je veux. J'ai même supprimé l'image de base sans problème.
la source
Basé sur slushy et les réponses de Michael Hoffman , si vous n'avez pas une tonne d'images, vous pouvez utiliser cette fonction shell:
puis appelez-le en utilisant
la source
Voici une solution basée sur l'API Python (
pip install docker
) qui répertorie de manière récursive les descendants avec leurs balises (le cas échéant), en augmentant l'indentation en fonction de la profondeur de la relation (enfants, petits-enfants, etc.):Exemple:
Je l'ai rendu disponible sous forme de résumé sur https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57
la source
Voici un moyen simple d'obtenir une liste d'images enfants qui dépendent d'une image parente:
Cela générera une liste d'ID d'images enfant / parent, par exemple (tronqué par souci de concision):
Le côté gauche est l'ID de l'image enfant, le côté droit est l'ID de l'image parent que nous essayons de supprimer, mais il indique "l'image a des images enfants dépendantes". Cela nous dit que
abcdefghijkl
c'est l'enfant qui dépend123456789012
. Nous devons donc d'aborddocker rmi abcdefghijkl
, puis vous pouvezdocker rmi 123456789012
.Maintenant, il peut y avoir une chaîne d'images enfants dépendantes, vous devrez peut-être répéter pour trouver le dernier enfant.
la source
Vous pouvez supprimer des images Docker indépendamment de la relation parent et enfant via le répertoire ci-dessous de Docker
Dans ce répertoire, vous pouvez trouver des images Docker, vous pouvez donc supprimer ce que vous voulez.
la source
/var/lib/docker
Que diriez-vous:
Il imprimera les identifiants de l'image enfant, avec le
sha256:
préfixe.J'ai également eu ce qui suit, qui ajoute les noms:
ID=
Obtient l'ID complet de l'imageIMAGES=
Obtient toutes les images enfants qui ont cette image répertoriée comme unImage
echo...
Supprime les doublons et fait écho aux résultatsla source
J'ai concocté ceci pour trouver de manière récursive les enfants, leurs balises repo et imprimer ce qu'ils font:
N'oubliez pas de supprimer / tmp / dii- * si votre hôte n'est pas sécurisé.
la source
J'étais également confronté au même problème. Suivez les étapes ci-dessous pour résoudre le problème.
Arrêtez tous les conteneurs en cours d'exécution
docker stop $ (docker ps -aq) Supprimer tous les conteneurs
docker rm $ (docker ps -aq) Supprimer toutes les images
docker rmi $ (images de docker -q)
la source