无需拉取本地,如何查看Registry中Docker镜像的Repo Tags?
不本地拉取镜像查询私有Registry镜像标签的方法
一、使用Docker Registry HTTP API(推荐)
私有仓库需先处理认证,以下是完整操作流程:
1. 获取认证Token(仓库启用认证时)
替换<registry-url>、<repo-name>、<username>、<password>为实际值,请求认证Token:
TOKEN=$(curl -s "https://<registry-url>/v2/auth?service=<registry-url>&scope=repository:<repo-name>:pull" \ -u "<username>:<password>" | jq -r '.token')
无认证的HTTP仓库可跳过此步骤,后续请求无需带Authorization头。
2. 获取latest标签对应的镜像Digest
必须指定Accept头请求v2格式manifest(v1格式无.config字段):
DIGEST=$(curl -s -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ "https://<registry-url>/v2/<repo-name>/manifests/latest" | jq -r '.config.digest')
若为多架构镜像(manifest list),可将Accept头替换为application/vnd.docker.distribution.manifest.list.v2+json,先提取对应架构的manifest digest后再查询。
3. 查询该Digest关联的所有标签
用拿到的digest反向查询所有关联标签,过滤latest即可得到具体版本:
curl -s -H "Authorization: Bearer $TOKEN" \ "https://<registry-url>/v2/<repo-name>/tags/list?digest=$DIGEST" | jq -r '.tags[]' | grep -v latest
二、使用Regclient工具(备选)
若不想编写复杂curl命令,regctl工具更简洁,支持私有仓库认证:
1. 配置私有仓库认证
先登录目标私有仓库:
regctl registry login <registry-url> -u <username> -p <password>
2. 获取镜像的所有关联标签
直接通过inspect命令提取标签,过滤latest:
regctl image inspect <registry-url>/<repo-name>:latest | jq -r '.RepoTags[]' | grep -v latest
常见问题解决
- 调用manifest时无
.config字段:确保请求头指定了Accept: application/vnd.docker.distribution.manifest.v2+json,v1格式manifest不包含该字段。 - 私有仓库认证失败:检查token请求的
scope参数是否正确,scope=repository:<repo-name>:pull仅需拉取权限即可完成标签和manifest查询。
内容的提问来源于stack exchange,提问作者Vetal
相关产品推荐
相关产品推荐

