Docker Python客户端API副本

我正在使用Docker python客户端API“复制”。 来自副本的响应的types为requests.packages.urllib3.HTTPResponse

是否需要对不同types的文件进行不同的处理?

我从容器中复制了一个文本文件,但是当我尝试使用response.read()读取它时,我得到的文本数据与二进制数据混合在一起。 我看到内容解码器

 >>>resonse.CONTENT_DECODERS >>>['gzip', 'deflate'] 

处理/读取/转储来自复制API的响应的最佳方式是什么?

docker API的响应是一个未压缩的tar文件。 我不得不阅读docker的源代码来了解响应的格式,因为这没有logging。 例如,要在remote_path下载文件,您需要执行以下操作:

 import tarfile, StringIO, os reply = docker.copy(container, remote_path) filelike = StringIO.StringIO(reply.read()) tar = tarfile.open(fileobj = filelike) file = tar.extractfile(os.path.basename(remote_path)) print file.read() 

该代码应修改为在文件夹上工作。

为Python 3调整@ Apr的答案:

 import tarfile, io, os def copy_from_docker(client, container_id, src, dest): reply = client.copy(container_id, src) filelike = io.BytesIO(reply.read()) tar = tarfile.open(fileobj = filelike) file = tar.extractfile(os.path.basename(src)) with open(dest, 'wb') as f: f.write(file.read()) 
Interesting Posts