Docker加载并保存:“archive / tar:invalid tar header”

时间:2016-11-16 00:33:30

标签: linux docker redhat tar docker-image

我正在尝试将Docker镜像导入AWS Red Hat Linux上的Docker(3.10.0-514.el7.x86_64)并且遇到错误问题;

Error processing tar file(exit status 1): archive/tar: invalid tar header

同样的图像在我的本地计算机上工作正常,在Windows上的Boot2Docker也正常工作。它非常大(2.5 GB),但我已经验证了Red Hat Linux实例上的校验和,它与来源相同。

可能有什么问题,或者我如何解决它?

4 个答案:

答案 0 :(得分:6)

我想补充一点,该问题可能是由于Windows和Unix之间的STDOUT行为不同而引起的。因此,使用STDOUT的保存方式如下:

docker save [image] > file.tar后跟docker load < file.tar

如果saveload在不同的OS上执行,则

将不起作用。始终使用:

docker save [image] -o file.tar后跟docker load -i file.tar

防止出现这些问题。比较使用不同方法生成的TAR文件,您会发现它们的大小完全不同(我是303MB,而我是614MB)。

答案 1 :(得分:1)

解决此问题的正确方法是:

保存图像时,请使用此说明

Docker save --output=C:\YOUR_PATH\my_docker_image.tar e6f81ac424ae(image id)

当您尝试加载此图片时,请使用以下说明:

Docker load --input C:\YOUR_PATH\my_docker_image.tar

在此之后,您会看到名称为&lt; none&gt;的图片在Docker镜像中,要解决此问题,请使用命令标记

Docker tag IMAGE_ID mydockerapplication

答案 2 :(得分:0)

问题出在将TAR文件通过FTP传输到我的AWS实例-FTP客户端默认为ASCII模式而非二进制模式。将其设置为二进制文件后,导入存档就没有问题。

答案 3 :(得分:0)

作为Ostecke答案的更详细说明。

我发现这不是Windows特有的问题。这是一个强大的问题。 Powershell向STDOUT发出两个字节的字符,而不是一个字节的字符。如果您查看文件,您会注意到TAR标头在应为正确的标头(以及文件的其余部分)之间为空。这解释了为什么文件大小是原来的两倍。

另一方面,

CMD不会向STDOUT发出多字节字符。我发现,如果您在Windows上使用CMD,则保存文件的STDOUT方法可以在不同的操作系统上正常工作。

使用powershell,只有-o选项是安全的:

docker save [image] -o file.tar

使用CMD,这两种方法都可以正常工作。