2016-11-30 10 views
1

Я использую docker-py для чтения файлов и папок из контейнера. Как я использую метод get_archive() я хочу сохранить его в файл дегтя, так как он возвращает кортеж из потока данных сырой смолы, а также статистику:Чтение 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) 

Затем откройте этот файл в архиве дегтя и извлечь его.

tmp.seek(0) 
with tarfile.open(mode='r', fileobj=tmp) as tar: 
    tar.extractall() 
    tar.close() 

Обратите внимание, что я использовал high-level api.