Si no tiene una gran cantidad de imágenes, siempre existe el enfoque de fuerza bruta:
for i in $(docker images -q)
do
docker history $i | grep -q f50f9524513f && echo $i
done | sort -u
Instale dockviz y siga las ramas desde la identificación de la imagen en la vista de árbol:
go get github.com/justone/dockviz
$(go env GOPATH)/bin/dockviz images --tree -l
Respuesta corta: Aquí hay una secuencia de comandos python3 que enumera las imágenes acoplables dependientes.
Respuesta larga: Puede ver la identificación de la imagen y la identificación principal de todas las imágenes creadas después de la imagen en cuestión con lo siguiente:
docker inspect --format='{{.Id}} {{.Parent}}' \
$(docker images --filter since=f50f9524513f --quiet)
Debería poder buscar imágenes con una identificación principal que comience con f50f9524513f, luego busque imágenes secundarias de esos , etc.. Pero .Parent
no es lo que piensas, por lo que en la mayoría de los casos deberás especificar docker images --all
anterior para que funcione, también obtendrá ID de imagen para todas las capas intermedias.
Aquí hay una secuencia de comandos python3 más limitada para analizar la salida de la ventana acoplable y realizar la búsqueda para generar la lista de imágenes:
#!/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 guarda esto como desc.py
podría invocarlo de la siguiente manera:
docker images \
| fgrep -f <(docker inspect --format='{{.Id}} {{.Parent}}' \
$(docker images --all --quiet) \
| python3 desc.py f50f9524513f )
O simplemente use la esencia anterior, que hace lo mismo.
Creé una esencia con un script de shell para imprimir el árbol descendiente de una imagen acoplable, en caso de que alguien esté interesado en la solución 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" ""