如何通过Docker get_archive API修复ReadError

时间:2019-03-30 18:58:18

标签: docker tarfile

我需要将文件或目录从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

需要帮助来了解此错误以及如何解决并继续前进的想法。

0 个答案:

没有答案