2016-11-30 88 views
1

我正在使用docker-py從容器中讀取文件和文件夾。當我使用get_archive()我想將它保存到一個tar文件,因爲它返回原始焦油數據流的元組的方法和統計:將HTTPResponse讀取到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文件。我怎樣才能做到這一點?我嘗試了一堆東西,但它只適用於文件,而不適用於目錄。

回答

0

流是原始數據的焦油,所以首先,你需要將它寫入文件:

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。