docker login harbor.internal:8443 -u robot
cat ~/.docker/config.json | grep -A2 auths
docker pull harbor.internal:8443/base/app:1.0

在构建机上拉基础镜像时命令行只回一句 unauthorized: authentication required,可同一台机器上 docker login 明明返回 Login Succeeded,重登一次还是被拒,很让人费解。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:凭据是按 registry 地址分条存的,登录的是不带端口的域名,拉取写的却是带端口的完整地址,config.json 里两个 key 对不上,凭据自然取不出来,和账号权限无关。

围绕「docker login 401」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

处理上按这个顺序:先确认 config.json 里 auths 那一条的 key 与镜像地址完全一致 连端口也别漏;重新登录一次带端口的地址 别把端口省掉 写完整地址;账号要单独授予读权限 能登录不代表能拉这个仓库。

确认没问题再收工,同一终端里 pull 成功,config.json 的 auths 下能看到带端口的 key 条目,重启终端也不会失效。

作者 9823189