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端口,我们需要把这个服务给停掉。

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

总结

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

相关文章

  • docker离线部署docker,部署业务方式

    docker离线部署docker,部署业务方式

    这篇文章主要介绍了docker离线部署docker,部署业务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • docker部署运行jar全过程

    docker部署运行jar全过程

    这篇文章主要介绍了docker部署运行jar全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Docker安装Nginx问题及错误分析

    Docker安装Nginx问题及错误分析

    这篇文章主要介绍了Docker安装Nginx的问题及错误分析正确的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Docker+Nginx单副本零停机发布实现并解决文件访问 404

    Docker+Nginx单副本零停机发布实现并解决文件访问 404

    本文提供了解决Docker容器文件隔离问题的方法,核心是Nginx和业务容器挂载相同的宿主机文件目录,通过Nginx重写规则去掉/api前缀匹配业务服务路径,同时发布时流量同步切换到临时副本,避免404和中断问题
    2026-04-04
  • Docker 安装 MySQL 并实现远程连接教程

    Docker 安装 MySQL 并实现远程连接教程

    这篇文章主要介绍了Docker 安装 MySQL 并实现远程连接的教程,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下
    2020-09-09
  • 一步步教你用docker部署postgreSQL数据库

    一步步教你用docker部署postgreSQL数据库

    这篇文章主要给大家介绍了关于如何使用docker部署postgreSQL数据库的相关资料,PostgreSQL是一款功能丰富的关系型数据库,类似于MySQL,它也是受欢迎程度非常高的,需要的朋友可以参考下
    2023-11-11
  • Docker网络代理设置详解

    Docker网络代理设置详解

    在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理。本篇文章主要介绍了Docker网络代理设置详解,有兴趣的可以了解一下。
    2017-02-02
  • docker垃圾清理方式

    docker垃圾清理方式

    文章主要介绍了如何删除Docker镜像和容器、清理Docker磁盘空间以及配置Docker日志大小,通过这些方法可以有效地管理Docker资源,避免磁盘空间不足的问题
    2025-03-03
  • Docker运行临时镜像容器的实现

    Docker运行临时镜像容器的实现

    本文主要介绍了基于Docker进行镜像构建或排查问题时的两种调试方法,对于普通应用镜像,可以直接运行并进入容器内部进行调试,如MySQL、Redis等,对于基础镜像,由于它们会默认启动自己的进程,直接启动容器会导致生命周期结束,感兴趣的可以了解一下
    2026-01-01
  • docker制作tomcat镜像方法及异常处理

    docker制作tomcat镜像方法及异常处理

    在Docker中创建一个Tomcat镜像是一个常见的需求,尤其是在开发、测试和部署Java Web应用程序时,这篇文章主要介绍了docker制作tomcat镜像方法及异常处理的相关资料,需要的朋友可以参考下
    2025-08-08

最新评论