Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Docker加载并保存:“;存档/tar:无效的tar头“;_Linux_Docker_Redhat_Tar_Docker Image - Fatal编程技术网

Linux Docker加载并保存:“;存档/tar:无效的tar头“;

Linux Docker加载并保存:“;存档/tar:无效的tar头“;,linux,docker,redhat,tar,docker-image,Linux,Docker,Redhat,Tar,Docker Image,我正在尝试将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.5GB),但我已经在Red Hat Linux实例上验证了校验和,它与源代码中的校验和相同 可能有什么

我正在尝试将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.5GB),但我已经在Red Hat Linux实例上验证了校验和,它与源代码中的校验和相同


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

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

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

Docker save --output=C:\YOUR_PATH\my_docker_image.tar e6f81ac424ae(image id)
当您尝试加载此图像时,请使用以下说明:

Docker load --input C:\YOUR_PATH\my_docker_image.tar
在此之后,您将在Docker image中看到名为的图像,若要解决此问题,请使用命令标记

Docker tag IMAGE_ID mydockerapplication

我想补充一点,这个问题可能是由于Windows和Unix之间标准输出行为的差异造成的。因此,使用标准的保存方式,如:

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

如果在不同的操作系统上执行
保存
加载
,则将不起作用。始终使用:

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


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

问题在于将TAR文件FTPing到我的AWS实例中-FTP客户端默认为ASCII模式,而不是二进制模式。一旦我将其设置为二进制,导入归档文件就没有问题。

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

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

另一方面,CMD不向标准输出多字节字符。我发现,如果在windows上使用CMD,保存文件的标准方法在不同的操作系统中运行良好

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

docker save [image] -o file.tar

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

您是否尝试过将其推到注册表并将其下拉到红帽子盒上?你可以在Docker Hub上免费存储一张图片,这样你就可以试用了。如果可行,请提供重现问题所需的最少步骤,包括如何(以及在什么系统上)构建映像。您不能使用HTTP传输而不是FTP吗?我一直在试图找出为什么我的映像一整天都在膨胀2倍——就是这样。你是最棒的,每个人都爱你。