docker pull镜像报错:‘invalid checksum digest format‘解决

 更新时间:2025年08月07日 09:44:23   作者:CN-FuWei  
镜像推送/拉取报错,排查发现仓库正常但Docker默认连接443端口,配置了安全连接,最终因宿主机443端口被占用,停掉冲突服务后问题解决

一、问题现象

在进行镜像推送时,发生报错:

docker push registry.example.com/nginx:xxx
...
xxxx:Layers already exists
xxxx:Layers already exists
xxxx:Layers already exists
xxxx:Layers already exists
...
invalid checksum digest format

然后,从镜像仓库拉取镜像,也报错:

docker pull registry.example.com/nginx:xxx
Error reponse from daemon : error unmarshalling content: invalid character '<' looking for beging of value

二、排查过程

2.1 检查镜像

docker load -i nginx:xxx
docker images|grep nginx

镜像可以导入本地,证明镜像没有问题。

2.2 检查镜像仓库

docker version: 18.09.0

registry version: 1.1.0

检查镜像仓库的运行状态

docker ps |grep registry

绕过docker,通过Docker Registry API拉取镜像 :

curl -X GET http://your-registry/v2/<repository>/manifests/<tag>

#将以下内容替换为实际的值:
your-registry:你的 Registry 地址(例如,registry.example.com)。
<repository>: 你的镜像仓库名称
<tag>:        你要拉取的镜像标签

这个命令将返回镜像的 manifest(元数据),其中包含有关镜像的详细信息,包括层(layers)和配置。

然后,你可以提取 manifest 中的层信息,并使用 curl 命令拉取每个层。例如:

# 提取镜像的层信息
layers=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" http://your-registry/v2/<repository>/manifests/<tag> | jq -r '.layers[].digest')

# 拉取每个层
for layer in $layers; do
  curl -O -J -L http://your-registry/v2/<repository>/blobs/$layer
done

最终可以拉取成功,证明registry服务正常。

2.3 检查docker服务

2.3.1 检查服务运行状态

systemctl status docker

2.3.2 检查docker日志

journalctl -xe|grep docker

从这里可以看出docker默认去连接443端口

2.3.3 检查docker配置文件

cat /usr/lib/systemd/system/docker.service

可以看到,已经配置了registry的安全连接。

三、解决方案

通过多次执行docker push可以发现,连接会重置到443端口上,返回的类似是一个html的内容。

检查宿主机的443端口有没有监听:

netstat -tnulp|grep 443|grep LISTEN
tcp     0     0.0.0.0:443      0.0.0.0:*     LISTEN     101811/./httpServer

可以看到已经有服务监听了443端口,我们需要把这个服务给停掉。

最终镜像可以正常推拉到镜像仓库!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • kubernetes作用领域总结

    kubernetes作用领域总结

    在本文里我们给大家整理关于kubernetes作用领域以及可以做的项目和思路,有兴趣的朋友们参考下。
    2019-06-06
  • 使用Docker创建FTP服务器的过程解析

    使用Docker创建FTP服务器的过程解析

    这篇文章主要介绍了使用Docker创建FTP服务器的过程解析,使用 Docker 搭建 FTP 服务,不仅十分简单,而且可以对宿主机有一定的隔离,对Docker创建FTP服务器的过程感兴趣的朋友一起看看吧
    2022-04-04
  • Docker挂载文件结果是目录问题的解决方案

    Docker挂载文件结果是目录问题的解决方案

    在使用 Docker 进行应用容器化部署时,文件系统挂载(Volume Mount)是最常用的功能之一,也是问题高发区,本文给大家介绍了Docker挂载文件结果是目录问题的解决方案,需要的朋友可以参考下
    2025-05-05
  • MacOS Docker 安装的实现步骤

    MacOS Docker 安装的实现步骤

    本文主要介绍了MacOS Docker 安装的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Docker consul的容器服务更新与发现的问题小结

    Docker consul的容器服务更新与发现的问题小结

    这篇文章主要介绍了Docker consul的容器服务更新与发现,讲解了服务注册与发现的基本概念讲解,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Docker新手初探之常用命令实践记录

    Docker新手初探之常用命令实践记录

    这篇文章主要给大家介绍了关于Docker新手初探之常用命令实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • docker mysql启动时执行初始化sql

    docker mysql启动时执行初始化sql

    这篇文章主要介绍了docker mysql启动时执行初始化sql问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Docker连接mongodb实现过程及代码案例

    Docker连接mongodb实现过程及代码案例

    这篇文章主要介绍了Docker连接mongodb实现过程及代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • docker容器直接退出如何进入容器调试模式

    docker容器直接退出如何进入容器调试模式

    这篇文章主要介绍了docker容器直接退出,如何进入容器调试,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • docker重新加载nginx配置方式

    docker重新加载nginx配置方式

    这篇文章主要介绍了docker重新加载nginx配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论