32

我正在尝试将 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 实例上验证了校验和,它与源代码相同。

可能出了什么问题,或者我该如何解决?

4

4 回答 4

57

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

docker save [image] > file.tar其次是docker load < file.tar

save如果和load在不同的操作系统上执行,则将不起作用。始终使用:

docker save [image] -o file.tar其次是docker load -i file.tar

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

于 2018-11-07T16:20:01.630 回答
16

作为对 Ostecke 答案的更详细描述。

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

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

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

docker save [image] -o file.tar

使用 CMD,任何一种方法都可以正常工作。

于 2019-05-01T15:23:58.560 回答
2

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

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

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

当您尝试加载此图像时,请使用以下指令:

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

在此之后,您会在 Docker 映像中看到名称为 <none> 的映像,要解决此问题,请使用命令标签

Docker tag IMAGE_ID mydockerapplication
于 2017-12-04T08:24:47.077 回答
1

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

于 2018-11-20T19:30:30.197 回答