前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Docker】docker login Harbor搭建的registry报503错误

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

作者头像
runzhliu
发布2021-12-02 21:07:44
1.1K0
发布2021-12-02 21:07:44
举报
文章被收录于专栏:容器计算

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

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

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

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

代码语言:javascript
复制
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 的印象,可以看看官方的图片。

在这里插入图片描述
在这里插入图片描述

然后再看登录失败的日志,也就是从生产环境去登录测试环境,日志如下。

代码语言:javascript
复制
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 的日志。

代码语言:javascript
复制
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 的请求被转发了。

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档