Python docker py getarchive目标文件夹

Python docker py getarchive目标文件夹,python,docker,raw-data,dockerpy,Python,Docker,Raw Data,Dockerpy,我正在按照此链接中的说明进行get_归档 但是,我没有创建我的容器,而是尝试使用docker nginx中已经运行的容器作为输入字符串,以及nginx服务器中我的内容所在的目标文件夹“/usr/share/nginx/html”,并获得文件夹状态的输出。我想知道如何在此函数中指定目标文件夹如果没有,我的附加tar文件在哪里?我不知道我的文件是从哪里下载的 这是我的密码 strm,stat=c.get_archivecontainer_name,'/usr/share/nginx/html' pr

我正在按照此链接中的说明进行get_归档 但是,我没有创建我的容器,而是尝试使用docker nginx中已经运行的容器作为输入字符串,以及nginx服务器中我的内容所在的目标文件夹“/usr/share/nginx/html”,并获得文件夹状态的输出。我想知道如何在此函数中指定目标文件夹如果没有,我的附加tar文件在哪里?我不知道我的文件是从哪里下载的

这是我的密码 strm,stat=c.get_archivecontainer_name,'/usr/share/nginx/html'

printstrm的输出是
printstat的输出是{u'linkTarget':u,u'mode':2147484157,u'mtime':u'2016-10-05T09:37:17.928258508-05:00',u'name':u'html',u'size':4096}

我发现了这个函数的工作原理,它返回对容器的请求的原始响应。可以找到原始响应解释 为了提取原始内容,我们可以使用这段代码,这样我们就可以根据我的html案例中的输出文件以文本格式简单地读取原始数据

raw_data=strm.read()
f= open('out.html', 'w')
f.write(raw_data)

答案取决于您使用的docker sdk的版本

对于docker sdk 3.X之前的版本

get_archive返回类似流的文件。因此,使用shutil.copyfileobj将数据流传输到文件:

import shutil

strm, stat = container.get_archive(container_name, path_in_container)
with open('out.html', 'w') as outfile:
    shutil.copyfileobj(strm, outfile)
对于docker sdk 3.X+

get_archive返回文件内容的迭代器,因此只需迭代并写入:

strm, stat = container.get_archive(container_name, path_in_container)
with open('out.html', 'w') as outfile:
    for d in strm:
        outfile.write(d)

以上答案部分正确。如果您直接写入tar流,它会写入额外的未知元数据参数

为了只写内容,请使用以下命令:

from io import StringIO
strm,status = container.get_archive("container_path/")
for d in strm:
   pw_tar = tarfile.TarFile(fileobj=StringIO(d.decode('utf-8')))
   pw_tar.extractall("extract_to/")

文件夹或文件可以从流中提取。

当我使用此代码将目录从容器复制到主机时,我得到以下错误。你知道怎么解决这个问题吗?File/usr/lib/python2.7/tarfile.py,第750行,in_uuread raise ReadError意外数据结束tarfile.ReadError:意外数据结束