我正在尝试将Docker镜像导入AWS Red Hat Linux (3.10.0-514.el7.x86_64)上的Docker,但遇到错误;
Error processing tar file(exit status 1): archive/tar: invalid tar header同样的图像在我的本地机器上也可以正常工作,在Windows上的Boot2Docker中也是如此。它相当大(2.5 GB),但我已经在Red Hat Linux实例上验证了校验和,它与源代码中的校验和相同。
可能出了什么问题,或者我该如何解决它?
发布于 2018-11-08 00:20:02
我想补充的是,这个问题可能是由于Windows和Unix之间STDOUT行为的差异造成的。因此,使用STDOUT保存方式如下所示:
后跟docker load < file.tar的是docker save [image] > file.tar
如果save和load在不同的操作系统上执行,将无法工作。始终使用:
后跟docker load -i file.tar的是docker save [image] -o file.tar
来防止这些问题。比较不同方法生成的TAR文件,您会发现它们的大小完全不同(303MB与我的614MB )。
发布于 2019-05-01 23:23:59
作为对Ostecke的回答的更详细的描述。
我发现这不是windows特有的问题。这是powershell的问题。Powershell向STDOUT发出两个字节的字符,而不是一个字节的字符。如果查看文件,您会注意到TAR标头在应该是正确的标头(和文件的其余部分)之间有空值。这解释了为什么文件大小是原来的两倍。
另一方面,CMD不向STDOUT发出多字节字符。我发现,如果你在windows上使用CMD,那么STDOUT保存文件的方法在不同的OSes上都能很好地工作。
使用powershell,只有-o选项是安全的:
docker save [image] -o file.tar使用CMD,这两种方法都可以很好地工作。
发布于 2017-12-04 16:24:47
解决此问题的正确方法是:
保存图像时,请使用以下说明
Docker save --output=C:\YOUR_PATH\my_docker_image.tar e6f81ac424ae(image id)当您尝试加载此图像时,请使用以下指令:
Docker load --input C:\YOUR_PATH\my_docker_image.tar在此之后,您将在Docker镜像中看到带有名称的镜像,要解决此问题,请使用命令标签
Docker tag IMAGE_ID mydockerapplicationhttps://stackoverflow.com/questions/40622162
复制相似问题