网上通用解法:
保存镜像时:
docker save -o [image].tar // 重点是加上-o选项
load镜像时:
docker load -i [image].tar
本次遇到的问题,docker pull 官方镜像也报标题上的错误,上面的解法不可行
1. /etc/docker/daemon.json加上"debug": true,开启debug模式,重启docker
2. 查看/var/log/syslog系统日志,或者systemctl status --no-pager -l docker
3. docker pull 拉取镜像生成日志
4. 查看到日志中有如下报错
Jul 5 19:21:22 user1-PC dockerd[12660]: time="2021-07-05T19:21:22.900484398+08:00" level=debug msg="Using /usr/bin/unpigz to decompress"
Jul 5 19:21:22 user1-PC dockerd[12660]: time="2021-07-05T19:21:22.906903862+08:00" level=debug msg="Applying tar in /var/lib/docker/overlay2/5310514321a87c9de8cbf64b82375c67bfd425319c984deee5e8c7acc3595441/diff" storage-driver=overlay2
Jul 5 19:21:23 user1-PC dockerd[12660]: time="2021-07-05T19:21:23.826759201+08:00" level=debug msg="Cleaning up layer 5310514321a87c9de8cbf64b82375c67bfd425319c984deee5e8c7acc3595441: Error processing tar file(exit status 1): archive/tar: invalid tar header"
Jul 5 19:21:24 user1-PC dockerd[12660]: time="2021-07-05T19:21:24.827150282+08:00" level=debug msg="Downloaded 4a374dab6938 to tempfile /var/lib/docker/tmp/GetImageBlob171202648"
Jul 5 19:21:24 user1-PC dockerd[12660]: time="2021-07-05T19:21:24.862329656+08:00" level=info msg="Attempting next endpoint for pull after error: failed to register layer: Error processing tar file(exit status 1): archive/tar: invalid tar header"
5. Using /usr/bin/unpigz to decompress之后发生了错误,猜测是unpigz的问题
6. 在另一台可用的机器上发现机器里没有这个命令,也能成功pull
7. 测试mv /usr/bin/unpigz /usr/bin/unpigz-bak,让其不识别到这个命令
8. 成功pull,问题解决
查看官网发现有一个MOBY_DISABLE_PIGZ的参数,让docker在unpigz命令已安装的情况下也不使用unpigz
https://docs.docker.com/engine/reference/commandline/dockerd/