【Docker】docker login Harbor搭建的registry报503错误

生产和测试环境维护了两套 Harbor 仓库,准备做镜像同步,要实现这样的功能,首先得是两边环境网络是通的,通过临时的网络策略放开了,然后就是至少两边互相 docker login 对方的 registry 应该也需要成功,但是有个奇怪的问题出现了。

生产环境 docker login 测试环境的 registry OK,但是反过来却不行,意味着无法做镜像同步。

一开始怀疑是有些特殊端口没通(只开放了80端口),联系运维的同学,把 ip 对 ip 的所有端口都开放了,还是失败了,抓包发现生产环境会主动断开连接,然后就返回503了。

然后查看日志,先查看测试环境登录生产环境成功的时候,日志是怎么报告的。

Nov 17 17:54:27 172.18.0.x proxy[22141]: 生产环境ip - "GET /v2/ HTTP/1.1" 401 76 "-" "docker/19.03.11 go/go1.13.10 git-commit/42e35e61f3 kernel/5.4.107-1.el7.elrepo.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.11 \x5C(linux\x5C))" 0.003 0.003 .
Nov 17 17:54:27 172.18.0.x proxy[22141]: 生产环境ip - "GET /service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry HTTP/1.1" 200 890 "-" "docker/19.03.11 go/go1.13.10 git-commit/42e35e61f3 kernel/5.4.107-1.el7.elrepo.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.11 \x5C(linux\x5C))" 0.028 0.028 .
Nov 17 17:54:27 172.18.0.x proxy[22141]: 生产环境ip - "GET /v2/ HTTP/1.1" 200 2 "-" "docker/19.03.11 go/go1.13.10 git-commit/42e35e61f3 kernel/5.4.107-1.el7.elrepo.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.11 \x5C(linux\x5C))" 0.008 0.008 .

从状态码看,会先有一个 401 然后再去拿 token,拿到 docker 之后再去 login,成功返回200,这才是正常的流程,也符合我们对 docker client 登录 registry 的印象,可以看看官方的图片。
在这里插入图片描述
然后再看登录失败的日志,也就是从生产环境去登录测试环境,日志如下。

Nov 17 17:56:30 172.18.0.x proxy[26421]: 测试环境ip - "GET /v2/ HTTP/1.1" 401 76 "-" "docker/19.03.11 go/go1.13.10 git-commit/42e35e61f3 kernel/5.4.107-1.el7.elrepo.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.11 \x5C(linux\x5C))" 0.003 0.002 .

惊讶的发现,一次登录的过程中,只记录到一条日志,也就是 401 状态码的那一条。那么从官方图中,大概可以判断,应该是3和4的链路有问题。
在这里插入图片描述
这里的意思是,正式环境的 dockerd 会去 auth service 去拿 token,此时再看看 dockerd 的日志。

Nov 18 00:27:08 szglbd dockerd[22141]: time="2021-11-18T00:27:08.146062335+08:00" level=error msg="Handler for POST /v1.40/auth returned error: Get http://正式环境ip/v2/: received unexpected HTTP status: 503 Service Unavailable"
Nov 18 00:27:15 szglbd dockerd[22141]: time="2021-11-18T00:27:15.894732084+08:00" level=info msg="Error logging in to v2 endpoint, trying next endpoint: Get https://harbor.com/v2/: dial tcp 测试环境ip:443: connect: connection refused"

这里很明显,就是正式环境的 dockerd 去访问 auth service 503 了。于是查看 docker info 查看代理信息,果然加了代理!导致请求被 HTTP_PROXY 转发了,所以本地的 dockerd 无法正常请求到 token,于是校验失败了,503则是代理服务器返回的状态码,最后去掉代理,整个流程就正常了。

简单验证一下请求被代理转发了,通过抓包就可以发现,请求 token 的请求被转发了。
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 确认用户名和密码是否正确,可以尝试重新设置密码或者找回密码。 2. 确认harbor的地址是否正确,可以尝试使用ping命令测试连接是否正常。 3. 确认harbor的端口是否正确,可以尝试使用telnet命令测试端口是否开放。 4. 确认harbor的证书是否正确,可以尝试使用--insecure-registry选项跳过证书验证。 5. 确认网络是否正常,可以尝试使用其他网络环境登录harbor。 6. 确认harbor的权限是否正确,可以尝试使用管理员账号登录harbor。 7. 如果以上方法都无法解决问题,可以尝试重新安装harbor或者联系harbor的技术支持。 ### 回答2: Docker是一款流行的应用容器引擎,Harbor是一个开源的Docker Hub,用于安全地存储和分发Docker镜像。当我们需要使用Harbor时,需要使用Docker login登录Harbor。然而,有时候这个过程可能会失败。以下是几种可能的原因和解决方法: 1. 输入的用户名或密码有误:在登录Harbor时,需要输入正确的用户名和密码才能成功登录。如果输入错误,登录就会失败。需要检查用户名和密码的拼写,并重新输入以确保正确。 2. 登录url有误:当使用Docker login登录Harbor时,需要指定Harbor的url地址。如果输入的url地址有误,登录就会失败。确保输入的url地址是正确的,并且与Harbor服务器上的地址匹配。 3. 忘记指定端口号:Harbor默认使用端口号443用于https协议。在登录时,如果没有明确指定端口号,则Docker login将使用端口为80的http协议。如果Harbor使用的不是默认的端口,就需要在url地址中指定正确的端口号。 4. 没有正确的授权:当使用Docker login登录Harbor时,需要输入授权信息以验证身份。如果没有正确的授权信息,就会导致登录失败。确保正确的授权信息已经输入,并且是有效的。 5. Docker客户端版本过低:某些版本的Docker客户端可能与Harbor不兼容。如果使用的是旧版本的Docker客户端,则可能无法成功登录Harbor。需要升级到新版本的Docker客户端。 总之,将DockerHarbor结合使用可以更好地管理Docker镜像,但在使用过程中可能会遇到问题。以上是可能导致Docker login登录Harbor失败的原因及其相应的解决方法。需要根据具体情况进行诊断和解决。 ### 回答3: Docker是现在很流行的一个应用程序,而在进行开发过程中,Docker login登录Harbor失败是一种比较常见的问题,问题通常来自用户没有正常地配置Docker以访问Harbor仓库。 针对这个问题,我们需要先从以下几个方面进行排查: 1. 检查网络连接是否正常:Docker登录Harbor需要通过网络连接来完成,所以我们需要检查网络的连通性是否正常。 2. 检查Harbor服务平台是否正常:我们需要检查Harbor的服务平台是否正常运行,若Harbor服务平台故障,则Docker不能够登录。 3. 确认Docker登录凭证是否正确:参考Harbor的帮助文档,确认Docker登录凭证是否正确,以防止登录过程中参数错误导致登录失败。 4. 检查Docker客户端环境配置是否正确:检查Docker客户端环境配置信息中,Harbor相关配置是否正确。正确的配置可以通过以下命令获取: ``` docker info |grep Registry ``` 如果Docker登录Harbor仓库失败,最简单的方式是卸载并重装Docker客户端,或者在不改变Docker配置的情况下更新Docker版本。 综上所述,解决Docker登录Harbor失败问题,需要我们在网络连接、Harbor服务平台运行状态、Docker登录凭证、Docker客户端环境配置等方面进行排查,找到错误原因,并进行相应的解决措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值