-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathdocker_list_depdendent_images
executable file
·83 lines (72 loc) · 1.65 KB
/
docker_list_depdendent_images
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/bash
#
# based on https://stackoverflow.com/a/41176677 by Simon Brady
help() {
echo 'usage: docker_list_depdendent_images [-nh] [-v] [-r] IMAGE_ID'
echo ' docker_list_depdendent_images --help'
echo
echo ' -nh - do not output header'
echo ' -v - verbose image info output'
echo ' -r - recursive (dependencies of depencies)'
echo " (TODO: doesn' work yet)"
echo
exit 1
}
[ "$1" == "--help" ] && help
recursion_options=()
if [ "$1" == "-nh" ]; then
header=false
shift
else
header=true
fi
# we do not output headers when recursing
recursion_options+=("-nh")
if [ "$1" == "-v" ]; then
verbose=true
if [ "$header" == "true" ]; then
docker images | head -n 1 # output header
fi
recursion_options+=("-v")
shift
else
verbose=false
fi
if [ "$1" == "-r" ]; then
recursive=true
recursion_options+=("-r")
shift
else
recursive=false
fi
IMAGE_ID="$1"
get_dependent_image_ids() {
local IMAGE_ID="$1"
for i in $(docker images -q); do
docker history $i \
| grep -q "$IMAGE_ID" \
&& if [ "$i" != "$IMAGE_ID" ]; then
echo "$i"
fi
done
}
show_image_info() {
local IMAGE_ID="$1"
if [ "$verbose" == "true" ]; then
docker image ls | grep "$IMAGE_ID"
else
echo "$IMAGE_ID"
fi
}
set -e # stop on error
set -u # stop on undefined variable
set -o pipefail # stop part of pipeline failing
get_dependent_image_ids "$IMAGE_ID" \
| sort -u \
| while read DEPENDEND_IMAGE_ID; do
show_image_info "$DEPENDEND_IMAGE_ID"
if [ "$recursive" == "true" ]; then
recursion_options+=("$DEPENDEND_IMAGE_ID")
$0 "${options[@]}"
fi
done