尝试获取Docker Hub目录时范围不足

时间:2016-05-06 23:32:55

标签: docker docker-registry

我正在尝试获取Docker中心的目录列表,但到目前为止,我只是在响应中收到错误。我的理解是我需要传递一个带有目录请求的持票令牌,所以我首先得到带有相关范围的令牌:

curl -u "username:password "https://auth.docker.io/token?service=registry.docker.io&scope=registry:catalog:*"

(这是使用我的Docker Hub帐户中的用户名/密码)

然后我将返回的令牌传递给注册表:

curl -vL -H "Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6I(...)" https://registry-1.docker.io/v2/_catalog

为了回应这个要求,我得到了:

*   Trying 54.86.130.73...
* Connected to registry-1.docker.io (54.86.130.73) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.docker.io
* Server certificate: RapidSSL SHA256 CA - G3
* Server certificate: GeoTrust Global CA
> GET /v2/_catalog HTTP/1.1
> Host: registry-1.docker.io
> User-Agent: curl/7.43.0
> Accept: */*
> Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6I(...)
>
< HTTP/1.1 401 Unauthorized
HTTP/1.1 401 Unauthorized
< Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
Docker-Distribution-Api-Version: registry/2.0
< Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="registry:catalog:*",error="insufficient_scope"
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="registry:catalog:*",error="insufficient_scope"
< Date: Fri, 06 May 2016 23:00:08 GMT
Date: Fri, 06 May 2016 23:00:08 GMT
< Content-Length: 134
Content-Length: 134
< Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000
<
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Name":"catalog","Action":"*"}]}]}

...似乎要求我回去并获得我在上面输入的网址的授权。

这可能吗?如果是这样,我错过了什么?

2 个答案:

答案 0 :(得分:8)

我遇到了同样的问题,在docker支持下提出了这个问题并得到了以下答案, &#34;目录端点不能对Docker Hub起作用,因为该端点实际列出了Registry上的所有存储库,我们禁用了它,因为它会列出Docker Hub上的所有存储库。&#34;

答案 1 :(得分:1)

如果您想要用户名或组织的存储库信息,可以选择使用V1 api。这个问题是您需要根据可用的回购数量进行多次调用。

以下命令将为给定用户名提供repos:

curl -k -H "Authorization: Basic <encripted username:password>" -H "Accept: application/json" -X GET "https://index.docker.io/v1/search?q=<username>&n=100"

这里q是查询,n是每页中要返回的项目数。

通过将repo作为参数传递,可以根据您需要的数据进行另一次调用。