GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere l'elenco delle immagini figlie dipendenti in Docker?

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" ""

Linux
  1. Come elencare le dipendenze di un pacchetto in Linux

  2. Come cercare, estrarre, elencare ed eliminare immagini Docker su Linux

  3. Come ottenere l'ultima versione di Winetricks su Ubuntu?

  4. Come modificare le immagini Docker

  5. Come elencare i contenitori Docker

Come elencare i membri di un gruppo in Linux

Come trovare l'elenco dei repository installati in Linux

Come ottenere l'indirizzo IP di un contenitore Docker dall'host

Come aggiornare le immagini Docker all'ultima versione

Come ottenere un elenco di collegamenti simbolici su Linux

Come elencare / cercare / estrarre le immagini della finestra mobile su Linux