首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker加载并保存:"archive/ tar : invalid tar header“

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

Stack Overflow用户
提问于 2016-11-16 08:33:30
回答 4查看 25.5K关注 0票数 30

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

代码语言:javascript
复制
Error processing tar file(exit status 1): archive/tar: invalid tar header

同样的图像在我的本地机器上也可以正常工作,在Windows上的Boot2Docker中也是如此。它相当大(2.5 GB),但我已经在Red Hat Linux实例上验证了校验和,它与源代码中的校验和相同。

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

EN

回答 4

Stack Overflow用户

发布于 2018-11-08 00:20:02

我想补充的是,这个问题可能是由于Windows和Unix之间STDOUT行为的差异造成的。因此,使用STDOUT保存方式如下所示:

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

如果saveload在不同的操作系统上执行,将无法工作。始终使用:

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

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

票数 56
EN

Stack Overflow用户

发布于 2019-05-01 23:23:59

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

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

另一方面,CMD不向STDOUT发出多字节字符。我发现,如果你在windows上使用CMD,那么STDOUT保存文件的方法在不同的OSes上都能很好地工作。

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

代码语言:javascript
复制
docker save [image] -o file.tar

使用CMD,这两种方法都可以很好地工作。

票数 15
EN

Stack Overflow用户

发布于 2017-12-04 16:24:47

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

保存图像时,请使用以下说明

代码语言:javascript
复制
Docker save --output=C:\YOUR_PATH\my_docker_image.tar e6f81ac424ae(image id)

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

代码语言:javascript
复制
Docker load --input C:\YOUR_PATH\my_docker_image.tar

在此之后,您将在Docker镜像中看到带有名称的镜像,要解决此问题,请使用命令标签

代码语言:javascript
复制
Docker tag IMAGE_ID mydockerapplication
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40622162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档