Harbor 登录报错 - 核心服务不可用

前言

昨天安装harbor进行镜像文件备份,做了很多定时任务下去,今天早上一起来重新登录的时候发现报错

以下是我的解决方法

一、查看日志

harbor 默认日志文件放在 /var/log/harbor 下

每一个服务都有一个日志文件

正常来说,我们能够打开 UI 界面,就说明大部分服务是没问题的,主要问题会出现在harbor-core, harbor-db, harbor-jobservice 这三个。

然后我分别查看了三者的日志,最后在 jobservice.log 的日志中发现了以下报错

bash 复制代码
Feb 11 16:39:58 jobservice[85990]: 2026-02-11T16:39:58Z [INFO] [/controller/replication/transfer/image/transfer.go:297]: will retry 8s later
Feb 11 16:40:06 jobservice[85990]: 2026-02-11T16:40:06Z [INFO] [/controller/replication/transfer/image/transfer.go:289]: copying the blob sha256:cbb26815a162cd53311fbe68df13e4cb499fa9cdb5266e8a9654558dc72dbcae(the 4th running)...
Feb 11 16:51:29 jobservice[85990]: 2026-02-11T16:51:29Z [ERROR] [/controller/replication/transfer/image/transfer.go:395]: failed to pushing the blob sha256:568ee72b74354ff129972b4df22900d7426b444b54a7d5a559f61ea4643a14ed, size 1402807249: Put "http://core:8080/v2/base_deployment/rjgf/base_py_cv_env/blobs/uploads/2faf2282-7c3b-45ff-a00c-6c22c8e9d46c?_state=ERaz1UI5Xswm6OQZv9pO2AUw-yQWTFx6CxD_0KYT0BV7Ik5hbWUiOiJiYXNlX2RlcGxveW1lbnQvcmpnZi9iYXNlX3B5X2N2X2VudiIsIlVVSUQiOiIyZmFmMjI4Mi03YzNiLTQ1ZmYtYTAwYy02YzIyYzhlOWQ0NmMiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMjYtMDItMTFUMTY6MjE6MjkuMTY2OTE1MDczWiJ9&digest=sha256%3A568ee72b74354ff129972b4df22900d7426b444b54a7d5a559f61ea4643a14ed": readfrom tcp 172.18.0.10:48040->172.18.0.8:8080: context deadline exceeded (Client.Timeout or context cancellation while reading body)
Feb 11 16:51:29 jobservice[85990]: 2026-02-11T16:51:29Z [INFO] [/controller/replication/transfer/image/transfer.go:297]: will retry 8s later
Feb 11 16:51:37 jobservice[85990]: 2026-02-11T16:51:37Z [INFO] [/controller/replication/transfer/image/transfer.go:289]: copying the blob sha256:568ee72b74354ff129972b4df22900d7426b444b54a7d5a559f61ea4643a14ed(the 4th running)...
Feb 11 16:54:39 jobservice[85990]: 2026-02-11T16:54:39Z [ERROR] [/controller/replication/transfer/image/transfer.go:395]: failed to pushing the blob sha256:4b9152282303d8d747de13441aa1342b69790cffac6b527ca7f9bba6a4c5d86e, size 1136013084: http status code: 500, body: {"errors":[{"code":"UNKNOWN","message":"unkn

二、分析

Harbor 的镜像复制(replication)任务在推送大尺寸镜像 blob 时,出现了网络读取超时和服务端 500 内部错误,这也是导致 Harbor 服务不稳定的重要原因。

错误信息解读

  1. context deadline exceeded:jobservice 向 core 服务推送超大 blob(1.4GB/1.1GB)时,读取响应超时(默认超时时间不足以处理大文件传输);
  2. http status code: 500, body: {"errors":[{"code":"UNKNOWN"}]:core 服务处理 blob 推送时触发内部错误,属于服务端未捕获的异常(大概率和磁盘、资源、配置限制有关);
  3. 日志中反复出现 will retry 8s later:系统在自动重试失败的复制任务,会持续占用服务器资源,加重服务负载。

然后我去看我的磁盘空间(这才注意到)

bro原来我的磁盘空间被拉满了,怪不得服务没有响应

三、解决

既然知道了空间被拉满了,那么接下来我们就要去清理掉一些不必要的镜像。

去到对应的放置镜像的位置(看你设置的位置)

我的是:/data/harbor/registry/docker/registry/v2/blobs/sha256/

你会看到这一串文件

这些 "奇奇怪怪" 的名字,其实是 Docker Registry v2(Harbor 底层依赖的镜像存储服务)采用的内容寻址存储(Content-Addressable Storage, CAS) 机制的体现。

1. 核心原理:内容寻址(CAS)

Docker Registry 不按 "镜像名" 存储文件,而是按内容的哈希值来存储。

  • 每个镜像层(Layer)、镜像配置文件(Config)、镜像清单(Manifest)都会被计算出一个唯一的 SHA256 哈希值。
  • 只要内容完全相同,哈希值就完全相同,因此相同的层只会存储一次,极大节省了存储空间。
  • 这种方式确保了数据的完整性:下载时通过校验哈希,就能确认文件是否被篡改。

2. 目录结构解析

你看到的路径 /data/harbor/registry/docker/registry/v2/blobs/sha256 是 Harbor 存储镜像数据的核心目录,结构如下:

  1. 顶层目录sha256表示所有存储对象的哈希算法是 SHA256。

  2. 二级子目录 (如 1a, 1b, 1f, 20 等)这些是哈希值的前两位字符

    • 作用:避免单个目录下文件过多,提升文件系统性能。
    • 例如,一个完整的哈希 sha256:1a2b3c... 会被存放在 sha256/1a/1a2b3c... 目录下。
  3. 三级目录(完整哈希值)每个二级子目录下,是一个以完整哈希值命名的目录,里面存放着实际的二进制数据(即镜像层文件)。

3. 镜像的完整组成

一个完整的镜像在存储中由以下几部分组成:

  1. 镜像层(Blobs):就是你截图中看到的这些目录,包含了镜像的实际文件系统数据。
  2. 镜像清单(Manifest):一个 JSON 文件,也是一个 Blob,它列出了构成该镜像的所有层的哈希,以及镜像的配置信息。
  3. 标签(Tag) :在 Harbor 数据库中,将一个可读的名称(如 myimage:v1)映射到一个具体的 Manifest 哈希。

4. 安全清理的重要提醒

⚠️ 千万不要直接删除这些 sha256 目录下的文件!

  • 这些 Blob 可能被多个镜像共享,直接删除会导致其他镜像损坏。
  • 正确的做法是:
    1. 通过 Harbor Web UI 或 API 删除不再需要的镜像和标签。

    2. 执行 Harbor 的垃圾回收(Garbage Collection)命令,让系统自动清理那些没有被任何镜像或标签引用的 Blob:

      bash 复制代码
      # 停止 Harbor
      docker compose down
      # 执行垃圾回收
      docker run -it --rm -v /data/harbor/registry:/registry goharbor/registry:v2.8.0 garbage-collect /etc/docker/registry/config.yml
      # 重启 Harbor
      docker compose up -d

不过还好,我这个只是为了测试一下harbor迁移的可行性,所以我直接就删除了一些文件(别学我),只是为了能登录进去就好了。

删除完文件之后,执行以下命令

bash 复制代码
# 停止 Harbor
docker compose down

# 重启 Harbor
docker compose up -d

搞定可以登录进去了,这个时候如果大家想要用的话(如果你不是用安全的方法删除镜像文件,而是像我一样直接删除文件的话),最好就把全部镜像删除,重新从远程服务器的harbor上拉取镜像再备份一次。

四、其他错误

如果你的错误和我的不一样,但是登录的时候也是报的 服务错误的话,可以看看以下这个靓仔的文章:Harbor 核心服务不可用---故障排除_harbor核心服务不可用-CSDN博客

END

如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟

相关推荐
虹科网络安全1 小时前
艾体宝洞察 | 流程自动化的下一步,是决策自动化
运维·自动化
人道领域2 小时前
Spring拦截器原理与实战详解
java·运维·服务器
开开心心_Every3 小时前
在线看报软件, 22家知名报刊免费看
linux·运维·服务器·华为od·edge·pdf·华为云
%253 小时前
Nginx
运维·nginx
木子欢儿4 小时前
debian 13 安装配置ftp 创建用户admin可以访问 /mnt/Data/
linux·运维·服务器·数据库·debian
正儿八经的少年4 小时前
服务网关(Service Gateway)
运维·网络
wsad05324 小时前
Xshell 连接 CentOS 7 Minimal 完整配置指南
linux·运维·centos
末日汐4 小时前
应用层自定义协议与序列化
运维·服务器·网络
heartbeat..4 小时前
Java 微服务初学者入门指南(CSDN 博客版)
java·运维·微服务·学习笔记·入门