【云原生技术】EArorNee uoine .basanend via che sut o inoeturos y>e,xxx.aebord.yonding.xxxx:8443/v2/ failed

EArorNee uoine .basanend via che sut o inoeturos y>e,xxxx.harbor.yonding,xxxx:8443/v2/ failed with status: 401 unauthorized 我已经配置了daemon.json文件,也重启了docker,在登陆的时候报错这个是为什么?
x509 的报错早已解决;现在出现的是 HTTP 401 Unauthorized,含义完全不同:

• TLS 握手已经通过,Docker 能够连上 https://upcr.harbor.yunying.cupd:8443/v2/
• 但是 Harbor 返回 401,说明凭证无效或权限不足
daemon.json 只管 TLS/网络,不会帮你通过身份校验,所以即便重启 daemon 也仍然 401。

下面给出最常见的 4 个原因及对应排查 / 解决办法。

────────────────────────────────────────

  1. 账号或密码写错 / 含换行符
    ────────────────────────────────────────
    • 推荐的安全写法会把密码通过 STDIN 传给 Docker,这里如果没去掉末尾换行符就会失败。
# ★ 注意 -n;缺少 -n 会把回车也算进密码
echo -n 'MyP@ssw0rd!' | docker login upcr.harbor.yunying.cupd:8443 \
      -u cicd-bot --password-stdin

‒ 仍 401?先 UI 登录确认帐号密码无误,再回 CLI。

────────────────────────────────────────
2. 登录地址写错(必须与证书/Harbor Host 完全一致)
────────────────────────────────────────
Docker CLI 必须用 仓库根域名+端口 作为 login 目标,不能带 https://、不能省端口:

# 正确
docker login upcr.harbor.yunying.cupd:8443

# 错误示例
docker login https://upcr.harbor.yunying.cupd:8443
docker login upcr.harbor.yunying.cupd          # 省了 8443

如果 login 时地址写错,Docker 会对比 AuthService "host" 字段 → 返回 401。

────────────────────────────────────────
3. Harbor 权限:项目私有 / 用户角色不足
────────────────────────────────────────
• 在 Harbor UI ➜ Project ➜ Members 检查:
‒ 你的账号或 Robot Account 是否至少拥有 Developer(push/pull)或 Guest(pull)权限?
• 或直接把项目设为 Public 试一次,如果能成功拉取就说明是权限问题。

────────────────────────────────────────
4. Harbor 2.x 之后推荐用 Robot Account
────────────────────────────────────────
运维通常会禁用普通用户的 CLI 密码登录,只允许 Robot Account
创建步骤:

  1. Project ➜ Robot Accounts ➜ New Robot
  2. 复制生成的 robot$xxxxx 用户名和长密码
  3. CLI 登录:
    echo -n 'robot-generated-token' | docker login upcr.harbor.yunying.cupd:8443 \
          -u robot$xxxxx --password-stdin
    

────────────────────────────────────────
快速自检脚本(定位是哪一步出错)
────────────────────────────────────────

# 1) 直接用 curl 模拟 Basic Auth,看返回码与 Harbor JSON
curl -u 'cicd-bot:MyP@ssw0rd!' -v \
     https://upcr.harbor.yunying.cupd:8443/v2/ 2>&1 | grep '< HTTP'

# 2) 查看 Docker 已缓存的 token
cat ~/.docker/config.json | jq '.auths'
# 如果里边 auth 字段是旧密码,先  rm ~/.docker/config.json  再重新 login

────────────────────────────────────────
小结
────────────────────────────────────────

  1. 401 与 daemon.json 无关,纯粹是 身份或权限 问题。
  2. 核心检查:
    • 用户名/密码是否正确且无换行符;
    • login 的 Host:Port 是否与 Harbor 配置一致;
    • Harbor 项目权限、Robot Account 是否到位;
    • 清掉旧的 ~/.docker/config.json 再试。
  3. 仍排查不出,可 tail Harbor core 日志(/var/log/harbor/core.log)找“failed to authenticate”。

你可能感兴趣的:(云原生)