我正在使用docker-py从容器中读取文件和文件夹。当我使用 get_archive() 方法时,我想将其保存到 tar 文件,因为它返回原始 tar 数据流的元组和统计信息:
>>> import docker
>>> cli = docker.Client()
>>> ctnr = cli.create_container('busybox', 'true')
>>> stream, stat = cli.get_archive(ctnr, '/bin/sh')
>>> print(stat)
{u'linkTarget': u'', u'mode': 493, u'mtime': u'2015-09-16T12:34:23-07:00', u'name': u'sh', u'size': 962860}
stream
对象是一个requests.packages.urllib3.response.HTTPResponse
。我想读取流上的内容并将其写入 tar 文件。我怎样才能做到这一点?我尝试了很多方法,但它只适用于文件,不适用于目录。
最佳答案
该流是原始 tar 数据,因此首先,您需要将其写入文件:
ctnr = cli.create_container('busybox', 'true')
with tempfile.NamedTemporaryFile() as tmp:
(data, _) = ctnr.get_archive('/bin/sh')
for chunck in data.stream():
tmp.write(chunck)
然后,将此文件作为 tar 存档打开并解压。
tmp.seek(0)
with tarfile.open(mode='r', fileobj=tmp) as tar:
tar.extractall()
tar.close()
请注意,我使用了高级 API。
关于python - 读取 tar 文件的 HTTPResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900292/