Мне нужно скопировать файл или каталог из контейнера 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
Нужна помощь в понимании этой ошибки и идея о том, как ее исправить и двигаться вперед.