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