Se non hai un numero enorme di immagini, c'è sempre l'approccio della forza bruta:
for i in $(docker images -q)
do
docker history $i | grep -q f50f9524513f && echo $i
done | sort -u
Installa dockviz e segui i rami dall'id dell'immagine nella vista ad albero:
go get github.com/justone/dockviz
$(go env GOPATH)/bin/dockviz images --tree -l
Risposta breve: Ecco uno script python3 che elenca le immagini docker dipendenti.
Risposta lunga: Puoi vedere l'ID immagine e l'ID genitore per tutte le immagini create dopo l'immagine in questione con quanto segue:
docker inspect --format='{{.Id}} {{.Parent}}' \
$(docker images --filter since=f50f9524513f --quiet)
Dovresti essere in grado di cercare immagini con ID padre che inizia con f50f9524513f, quindi cercare immagini figlio di quelle , ecc.. Ma .Parent
non è quello che pensi., quindi nella maggior parte dei casi dovresti specificare docker images --all
sopra per farlo funzionare, otterrai anche gli ID immagine per tutti i livelli intermedi.
Ecco uno script python3 più limitato per analizzare l'output della finestra mobile ed eseguire la ricerca per generare l'elenco di immagini:
#!/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))))
Se lo salvi come desc.py
potresti invocarlo come segue:
docker images \
| fgrep -f <(docker inspect --format='{{.Id}} {{.Parent}}' \
$(docker images --all --quiet) \
| python3 desc.py f50f9524513f )
Oppure usa semplicemente l'essenza sopra, che fa la stessa cosa.
Ho creato un'essenza con script di shell per stampare l'albero discendente di un'immagine docker, se qualcuno fosse interessato alla soluzione bash:
#!/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" ""