2016-11-30 2 views
1

Ich verwende docker-py, um Dateien und Ordner aus einem Container zu lesen. Als ich die Methode verwenden get_archive() ich es in eine TAR-Datei gespeichert werden soll, da es ein Tupel eines rohen tar-Datenstrom zurückkehrt, und die Statistiken:Lesen einer HTTPResponse zu einer TAR-Datei

>>> 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} 

Das stream Objekt ist ein requests.packages.urllib3.response.HTTPResponse. Ich möchte den Inhalt im Stream lesen und in eine TAR-Datei schreiben. Wie kann ich das erreichen? Ich habe eine Menge Dinge ausprobiert, aber es funktionierte nur mit Dateien, aber nicht mit Verzeichnissen.

Antwort

0

Der Strom ist Rohteer Daten, so erste, müssen Sie es in eine Datei schreiben:

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) 

Dann öffnen Sie diese Datei als tar-Archiv und extrahieren.

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

Beachten Sie, dass ich die High-Level-API verwendet habe.