python Python3脚本,用于查找一个或多个docker镜像的后代
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Python3脚本,用于查找一个或多个docker镜像的后代相关的知识,希望对你有一定的参考价值。
#!/usr/bin/python3
#
# usage: python3 docker_descendants.py <image_id> ...
import sys
from subprocess import check_output
def main(images):
image_ids = set(images)
all_images = docker_images('--all', '--quiet')
all_links = parse_links(docker_links(all_images))
descendants = desc(image_ids, all_links)
pred = lambda s: lambda line: s[:12] in line
match = list(map(pred, descendants))
return filter(lambda i: any(s(i) for s in match), docker_images())
def parse_links(lines):
parseid = lambda s: s.replace('sha256:', '')
for line in reversed(list(lines)):
yield list(map(parseid, line.split()))
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 docker_links(images):
cmd = [ 'docker', 'inspect', '--format={{.Id}} {{.Parent}}']
return run(cmd + images)
def docker_images(*args):
return run(('docker', 'images') + args)
def run(cmd):
return check_output(cmd, universal_newlines=True).splitlines()
if __name__ == '__main__':
print('\n'.join(main(sys.argv[1:])))
以上是关于python Python3脚本,用于查找一个或多个docker镜像的后代的主要内容,如果未能解决你的问题,请参考以下文章
Python3 正则表达式不适用于脚本,但适用于 pythex.org
python3.6如何生成exe程序
用于从地理点列表中查找最近位置对的 Python 脚本
用于查找第n个素数的Python脚本
PythonWin 在不同版本中打开不同的脚本(Python 2 & Python 3)
将 python3 包添加到 Buildroot