我正在尝试将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实例上的校验和,它与来源相同。
可能有什么问题,或者我如何解决它?
答案 0 :(得分:6)
我想补充一点,该问题可能是由于Windows和Unix之间的STDOUT行为不同而引起的。因此,使用STDOUT的保存方式如下:
docker save [image] > file.tar
后跟docker load < file.tar
save
和load
在不同的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,这两种方法都可以正常工作。