docker py 的问题,tar 处的 UnicodeDecodeError 在图像构建时读取
Problems with docker py, UnicodeDecodeError at tar read on image build
我正在尝试从生成的 tar 文件制作 docker 图像,问题是 wats 生成的 tar 文件是有效的,并且代码之前有效。
t = tarfile.open('dockerfile.tar',mode='w')
file_name = tarfile.TarInfo("dockerfile")
file_name.size = len(dockerfile)
t.addfile(file_name, BytesIO(dockerfile.encode('utf-8')))
for file in static_files:
t.add(static_files_path + file,arcname='root/'+file)
for file in files:
if type(file["data"]) == str:
file_name = tarfile.TarInfo('root/'+file["file"])
file_name.size = len(file["data"].encode())
t.addfile(file_name, BytesIO(file["data"].encode()))
else:
file_name = tarfile.TarInfo('root/'+file["file"])
file_name.size = len(file["data"])
t.addfile(file_name, BytesIO(file["data"]))
t.close()
docker_client = Client(base_url=docker_host)
c=open('dockerfile.tar','r')
response = [line for line in docker_client.build(fileobj=c, rm=False, tag=image_name, custom_context=True)]
我得到的:
File "/usr/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 3584: invalid start byte
>>> data[3580:3590]
b'\x00\x00\x00\x00\x89PNG\r\n'
问题出在 \x89PNG ,但为什么会这样呢?错误?
其中,问题出在:
c=open('dockerfile.tar','r')
应该是
c=open('dockerfile.tar','rb')
我正在尝试从生成的 tar 文件制作 docker 图像,问题是 wats 生成的 tar 文件是有效的,并且代码之前有效。
t = tarfile.open('dockerfile.tar',mode='w')
file_name = tarfile.TarInfo("dockerfile")
file_name.size = len(dockerfile)
t.addfile(file_name, BytesIO(dockerfile.encode('utf-8')))
for file in static_files:
t.add(static_files_path + file,arcname='root/'+file)
for file in files:
if type(file["data"]) == str:
file_name = tarfile.TarInfo('root/'+file["file"])
file_name.size = len(file["data"].encode())
t.addfile(file_name, BytesIO(file["data"].encode()))
else:
file_name = tarfile.TarInfo('root/'+file["file"])
file_name.size = len(file["data"])
t.addfile(file_name, BytesIO(file["data"]))
t.close()
docker_client = Client(base_url=docker_host)
c=open('dockerfile.tar','r')
response = [line for line in docker_client.build(fileobj=c, rm=False, tag=image_name, custom_context=True)]
我得到的:
File "/usr/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 3584: invalid start byte
>>> data[3580:3590]
b'\x00\x00\x00\x00\x89PNG\r\n'
问题出在 \x89PNG ,但为什么会这样呢?错误?
其中,问题出在:
c=open('dockerfile.tar','r')
应该是
c=open('dockerfile.tar','rb')