Docker - 在Centos解压时出现错误(无效的tar头)

4
Docker version 18.06.1-ce, build e68fc7a
CentOS Linux release 7.5.1804 (Core)

我的Docker文件是

FROM node:8

当我执行 docker build -t my-image . 时,我遇到了以下错误。
Sending build context to Docker daemon  44.03kB
Step 1/1 : FROM node:8
8: Pulling from library/node
f189db1b88b3: Extracting [==================================================>]  54.25MB/54.25MB
3d06cf2f1b5e: Download complete
687ebdda822c: Download complete
99119ca3f34e: Download complete
e771d6006054: Download complete
b0cc28d0be2c: Download complete
7225c154ac40: Download complete
7659da3c5093: Download complete
failed to register layer: ApplyLayer exit status 1 stdout:  stderr: archive/tar: invalid tar header

有线索吗?有什么建议可以修复它吗?

当运行docker run -it ubuntu时,我遇到了相同的错误。


尝试先拉取镜像 docker pull node:8,然后构建您的镜像。 - Adiii
当提取时,我遇到了相同的错误。 - user12384512
2
您可能已经用尽了节点。请确保您使用的是overlay2存储驱动程序,而不是overlay。首先,我建议检查官方文档,看看您的Linux内核是否支持overlay2,然后按照说明更改您的存储驱动程序。 - prithajnath
你是否在使用网络代理? - BMitch
尝试运行 docker info 命令,然后我们就可以查看您的配置了。 - Frank AK
显示剩余3条评论
3个回答

1
错误消息表明您正在尝试下载的图像已损坏。我能想到几个可能导致这种情况发生的地方:
  • 远程注册表服务器上
  • 在传输过程中
  • 在内存中
  • 在磁盘上
  • 由应用程序引起
考虑到该图像的流行度,我会排除注册表服务器出现问题的可能性。可能您有一个不稳定的服务器,具有在下载大型图像时触发的内存或磁盘问题。在Linux上,您可能会在dmesg中看到内核错误。
Docker的版本足够新,以至于任何以前的问题早已被修复。只有一个关于处理非常大的层(超过8GB)的tar文件的问题,但这不适用于您正在拉取的图像。 tar处理直接嵌入到docker中,因此更改或升级tar二进制文件不会影响docker。
您可能会遇到存储驱动程序和后端存储设备的问题。如果docker没有默认为此,则从devicemapper更改为overlay2是一个好的第一步(您可以在docker info中查看当前的存储驱动程序,并使用/etc/docker/daemon.json中的条目进行更改)。
我的第一个猜测是列表中的“运输途中”部分。由于请求将通过https进行,这不会是来自错误数据包。但是拦截所有网络流量的网络代理可能是罪魁祸首。如果您有代理,请确保配置docker以登录并使用您的代理。有关详细信息,请参见https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

0

尝试使用以下命令解压您的镜像:tar tvf yourarchive

如果没有错误,请尝试更新Docker(如果可能的话)。 如果出现错误,请尝试重新构建您的归档文件。

类似问题的描述可以在这里找到。


0

当您在tar提取过程中遇到相同的错误时,获取的镜像可能确实已损坏。

对于问题15561的评论提示,本地构建仍然有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接