私有仓库 Harbor 2.0 认证配置 docker login 失败怎么办

文章导读
Harbor 2.0 docker login 失败通常由客户端未配置 insecure-registries 或服务端 HTTPS 证书不受信任导致。先检查 Docker 守护进程配置,再核对 Harbor 核心服务日志,避免直接重置密码掩盖配置问题。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Harbor 2.0 docker login 失败通常由客户端未配置 insecure-registries 或服务端 HTTPS 证书不受信任导致。先检查 Docker 守护进程配置,再核对 Harbor 核心服务日志,避免直接重置密码掩盖配置问题。

先说结论:大多数登录失败是因为 Docker 客户端与 Harbor 服务端之间的协议(HTTP/HTTPS)不匹配或认证凭据错误。

  • 先确认 Docker 客户端是否配置了正确的 insecure-registries 地址。
  • 先处理 Harbor 核心容器日志中的认证报错信息。
  • 再验证使用 admin 默认账号或新凭据能否成功登录。

命令速用版

如果急需临时验证连通性,可在 Docker 客户端执行以下命令检查配置状态。

# 查看 Docker 守护进程配置
cat /etc/docker/daemon.json

# 重启 Docker 服务使配置生效
systemctl restart docker

# 尝试登录
docker login <harbor 地址>

为什么会这样

Harbor 2.0 架构变更导致认证流程强依赖 Token 服务,协议不匹配会直接阻断握手。Harbor 2.0 版本移除了部分旧版兼容逻辑,默认强制 HTTPS 访问,如果客户端通过 HTTP 访问未配置信任的仓库地址,Docker 守护进程会拒绝连接。同时,核心服务(Core)与注册表服务(Registry)之间的内部认证失败也会表现为客户端登录错误。

分步处理

按顺序执行以下步骤,每步完成后观察报错信息变化。

步骤 1:检查客户端配置
确认 Docker 客户端是否信任 Harbor 地址。如果 Harbor 未配置 HTTPS,必须在客户端 daemon.json 中添加 insecure-registries。

私有仓库 Harbor 2.0 认证配置 docker login 失败怎么办
{
  "insecure-registries": ["harbor.example.com"]
}

修改后必须重启 Docker 服务,否则配置不生效。

步骤 2:核对认证凭据
Harbor 2.0 初始安装默认账号为 admin,默认密码通常为 Harbor12345。如果修改过密码,确认大小写及特殊字符是否转义正确。

步骤 3:查看服务端日志
登录 Harbor 服务器,查看核心服务日志定位具体错误码。

docker logs -f harbor_core | grep "authentication"

如果出现 database connection refused,说明 Harbor 内部数据库连接异常,需优先修复数据库服务。

私有仓库 Harbor 2.0 认证配置 docker login 失败怎么办

步骤 4:检查时间同步
认证 Token 依赖时间戳,服务器与客户端时间偏差超过 5 分钟可能导致签名验证失败。使用 date 命令核对两端时间。

怎么验证是否生效

执行 docker login 命令后,终端输出 Login Succeeded 即表示认证通过。后续可执行 docker pull <镜像名> 拉取私有镜像,若无需再次输入密码且拉取成功,说明认证会话保持正常。

常见坑

  • 密码特殊字符:Shell 中特殊字符(如!@#)可能导致密码解析错误,建议用单引号包裹密码或使用 `--password-stdin` 参数。
  • HTTPS 证书自签名:如果使用自签名证书,客户端需将 CA 证书复制到 /etc/docker/certs.d/ 目录下,否则会被拒绝。
  • Nginx 代理配置:Harbor 前端通常由 Nginx 代理,如果 Nginx 配置的 client_max_body_size 过小,大镜像推送会失败,虽不影响 login 但影响后续操作。

常见问题

Harbor 2.0 默认密码是什么?

默认账号为 admin,默认密码为 Harbor12345,首次登录后建议立即修改。

docker login 报错 http: server gave HTTP response to HTTPS client 怎么办?

这是协议不匹配,需要在 Docker 客户端 daemon.json 配置 insecure-registries 并重启 Docker 服务。

如何重置 Harbor admin 密码?

可通过 Harbor 页面管理员账户修改,或重置数据库 users 表中的密码哈希,但建议优先使用页面功能。

参考来源

  • Harbor 官方文档,Configuration options,https://goharbor.io/docs/
  • Harbor GitHub Issues,Authentication failure troubleshooting,https://github.com/goharbor/harbor/issues