148 votes

Comment obtenir la liste des enfants à charge les images dans le Panneau?

J'essaie 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

C'est le 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

mais il n'y a aucune information supplémentaire:

# 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 de l' enfant à charge d'images il le prétend?

il n'y a pas de course ni arrêté contenants que l'id de l'image.

113voto

Simon Brady Points 539

Si vous n'avez pas un grand nombre d'images, il y a toujours la force brute approche:

for i in $(docker images -q)
do
    docker history $i | grep -q f50f9524513f && echo $i
done | sort -u

66voto

Aryeh Leib Taurog Points 867

Réponse courte: Voici une python3 script qui liste dépendante de docker images.

Réponse longue: Vous pouvez voir l'image de l'id et l'id parent pour l'ensemble de l'image créé à l'image en question avec les éléments suivants:

docker inspect --format='{{.Id}} {{.Parent}}' \
    $(docker images --filter since=f50f9524513f --quiet)

Vous devriez être en mesure de rechercher des images avec le parent de l'id de départ avec f50f9524513f, puis regarder pour enfant images de personnes, etc.. Mais .Parent n'est pas ce que vous en pensez., donc, dans la plupart des cas, vous devrez spécifier docker images --all ci-dessus pour faire ce travail, vous obtiendrez l'image id de toutes les couches intermédiaires.

Voici un nombre plus limité d'python3 script pour analyser le panneau de sortie et de faire la recherche pour générer la liste des images:

#!/usr/bin/python3
import sys

def desc(image_ids, links):
    if links:
        link, *tail = links
        if len(link) > 1:
            image_id, parent_id = link
            checkid = lambda i: parent_id.startswith(i)
            if any(map(checkid, image_ids)):
                return desc(image_ids | {image_id}, tail)
        return desc(image_ids, tail)
    return image_ids


def gen_links(lines):
    parseid = lambda s: s.replace('sha256:', '')
    for line in reversed(list(lines)):
        yield list(map(parseid, line.split()))


if __name__ == '__main__':
    image_ids = {sys.argv[1]}
    links = gen_links(sys.stdin.readlines())
    trunc = lambda s: s[:12]
    print('\n'.join(map(trunc, desc(image_ids, links))))

Si vous enregistrez ce que desc.py vous pu l'invoquer comme suit:

docker images \
    | fgrep -f <(docker inspect --format='{{.Id}} {{.Parent}}' \
        $(docker images --all --quiet) \
        | python3 desc.py f50f9524513f )

Ou tout simplement utiliser le résumé ci-dessus, qui fait la même chose.

16voto

mmoya Points 327

Installer dockviz et suivez les branches de l'id de l'image dans l'arborescence:

go get github.com/justone/dockviz
$(go env GOPATH)/bin/dockviz images --tree -l

9voto

Michal Linhard Points 11

J'ai créé un gist avec shell script pour imprimer descendant de l'arbre de docker image, n'importe qui devrait être intéressé par bash solution:

#!/bin/bash
parent_short_id=$1
parent_id=`docker inspect --format '{{.Id}}' $1`

get_kids() {
   local parent_id=$1
   docker inspect --format='ID {{.Id}} PAR {{.Parent}}' $(docker images -a -q) | grep "PAR ${parent_id}" | sed -E "s/ID ([^ ]*) PAR ([^ ]*)/\1/g"
}

print_kids() {
   local parent_id=$1
   local prefix=$2
   local tags=`docker inspect --format='{{.RepoTags}}' ${parent_id}`
   echo "${prefix}${parent_id} ${tags}"

   local children=`get_kids "${parent_id}"`

   for c in $children;
   do
       print_kids "$c" "$prefix  "
   done
}

print_kids "$parent_id" ""

0voto

Jvn Points 19

Vous pouvez supprimer des images Docker, indépendamment de la mère et de l'enfant relativement à travers le ci-dessous répertoire de Docker

/var/lib/docker/image/devicemapper/imagedb/content/sha256

Dans ce répertoire, vous pouvez trouver des images Docker, de sorte que vous pouvez supprimer ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X