我需要将文件或目录从Docker容器复制到主机。我正在使用docker-py以编程方式与Docker交互。
在非常简化的版本中,python代码如下所示。
我从StackOverflow获取了以下代码,并尝试了不同版本的get_archive代码。以下代码仅适用于文件,不适用于目录。还会在文件的开头和结尾添加一些特殊字符。
def copy_from_container(container, src_dir, src_file):
strm,status = container.get_archive('/var/log/')
with open(src_file, 'w') as outfile:
for d in strm:
outfile.write(d)
我在Stackoverflow上阅读了另一个讨论上述问题的线程,并最终使用了以下代码。
def copy_from_container(container, src_dir, src_file):
strm,status = container.get_archive('/var/log/')
with open(src_file, 'w') as outfile:
for d in strm:
outfile.write(d)
但是,我最终遇到了以下错误。
/usr/lib/python2.7/tarfile.py:187: UnicodeWarning: Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
if s[0] != chr(0200):
Traceback (most recent call last):
File "c_copy_file.py", line 45, in <module>
copy_from_container(container, src_dir, src_file)
File "/root/c_container.py", line 72, in copy_from_container
pw_tar.extractall("./")
File "/usr/lib/python2.7/tarfile.py", line 2079, in extractall
self.extract(tarinfo, path)
File "/usr/lib/python2.7/tarfile.py", line 2116, in extract
self._extract_member(tarinfo, os.path.join(path, tarinfo.name))
File "/usr/lib/python2.7/tarfile.py", line 2192, in _extract_member
self.makefile(tarinfo, targetpath)
File "/usr/lib/python2.7/tarfile.py", line 2233, in makefile
copyfileobj(source, target)
File "/usr/lib/python2.7/tarfile.py", line 266, in copyfileobj
shutil.copyfileobj(src, dst)
File "/usr/lib/python2.7/shutil.py", line 49, in copyfileobj
buf = fsrc.read(length)
File "/usr/lib/python2.7/tarfile.py", line 831, in read
buf += self.fileobj.read(size - len(buf))
File "/usr/lib/python2.7/tarfile.py", line 743, in read
return self.readnormal(size)
File "/usr/lib/python2.7/tarfile.py", line 758, in readnormal
return self.__read(size)
File "/usr/lib/python2.7/tarfile.py", line 750, in __read
raise ReadError("unexpected end of data")
tarfile.ReadError: unexpected end of data
需要帮助来了解此错误以及如何解决并继续前进的想法。