You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker公共Registry API V2认证失败,寻求正确认证方式

Docker Registry API V2(Docker Hub)正确认证方式

首先确认:Docker公共Registry的地址确实是registry-1.docker.io,你的地址是对的。

直接用Docker Hub账号的用户名密码做Basic Auth请求v2/端点会返回未授权,是因为Docker Hub的V2 Registry采用Bearer Token认证机制,而非直接的Basic Auth。正确流程如下:

步骤1:获取Bearer Token

需要先向Docker Hub的认证服务器请求访问令牌,请求参数需包含目标资源的权限范围(scope)和服务标识:

  • 认证地址:https://auth.docker.io/token
  • 必要参数:
    • service=registry.docker.io(固定值,指定认证服务对应的Registry)
    • scope:格式为repository:<仓库名>:<权限>,比如要拉取官方nginx镜像的权限,就是repository:library/nginx:pull;如果要访问自己的私有仓库,就是repository:<你的用户名>/<仓库名>:pull
  • 认证方式:用Docker Hub的用户名和密码做Basic Auth

示例curl命令:

# 替换<你的用户名>、<你的密码>、<仓库范围>为实际值
curl -u "<你的用户名>:<你的密码>" "https://auth.docker.io/token?service=registry.docker.io&scope=<仓库范围>"

返回的JSON里会包含access_token字段,这就是后续API调用需要的令牌。

步骤2:使用Bearer Token调用V2 API

拿到token后,在请求V2 API的头里加入Authorization: Bearer <access_token>即可。

示例:获取官方nginx镜像的标签列表

# 替换<你的access_token>为步骤1拿到的令牌
curl -H "Authorization: Bearer <你的access_token>" "https://registry-1.docker.io/v2/library/nginx/tags/list"

常见问题说明

  • 如果请求的是公开仓库,其实可以不用用户名密码,直接请求token(此时scope对应的权限是pull),认证服务器会返回无需授权的令牌
  • 私有仓库必须用自己的Docker Hub账号密码获取对应权限的token
  • 若返回unauthorized,检查scope是否正确(比如仓库名是否写错,权限是否匹配),或者用户名密码是否正确

内容的提问来源于stack exchange,提问作者AchalaM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:52:07