How to get the list of dependent child images in Docker? How to get the list of dependent child images in Docker? docker docker

How to get the list of dependent child images in Docker?


If you don't have a huge number of images, there's always the brute-force approach:

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


Short answer:Here is a python3 script that lists dependent docker images.

Long answer:You can see the image id and parent id for all image created after the image in question with the following:

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

You should be able to look for images with parent id starting with f50f9524513f, then look for child images of those, etc.. But .Parent isn’t what you think., so in most cases you would need to specify docker images --all above to make that work, then you will get image ids for all intermediate layers as well.

Here's a more limited python3 script to parse the docker output and do the searching to generate the list of images:

#!/usr/bin/python3import sysdef 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_idsdef 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))))

If you save this as desc.py you could invoke it as follows:

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

Or just use the gist above, which does the same thing.


Install dockviz and follow the branches from the image id in the tree view:

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