Docker Hub API v2令牌authentication问题

目前,我正在研究一个非常简单的Docker容器编排器版本,我必须能够从公共Docker Hubregistry中获取图像摘要。 我想用Docker Registry API v2来达到这个目的。

我正在尝试使用以下API调用获取授权令牌:

curl https://auth.docker.io/token?service=index.docker.io&scope=repository:alpine:pull 

…我收到如下回复:

 {"token":"eyJhbGciOiJFUzI.eyJhY2Nlc3MiOltdLCJhdWQiOiJpbmRleC5kb2NrZXIuaW8iLCJleHAiOjE0NzQ1NDcyODMsImlhdCI6MTQ3NDU0Njk4MywiaXNzIjoiYXV0aC5kb2NrZXIuaW8iLCJqdGkiOiIzVTdCazF4dm9CLVA0MGJWVF9JSiIsIm5iZiI6MTQ3NDU0Njk4Mywic3ViIjoiIn0.516fS692WGHNi5Sc44iB8OFSLairrM6n1zNvVo5KXAxlsxsP4rE7VDmW5d0YqvTYeKfZAYIi9yEptx4xJlQ6DA"} 

似乎一切都没问题,我试图使用获得的令牌为我的下一个API调用:

 curl -i -H "Authorization: Bearer eyJhbGciOiJFUzI.eyJhY2Nlc3MiOltdLCJhdWQiOiJpbmRleC5kb2NrZXIuaW8iLCJleHAiOjE0NzQ1NDcyODMsImlhdCI6MTQ3NDU0Njk4MywiaXNzIjoiYXV0aC5kb2NrZXIuaW8iLCJqdGkiOiIzVTdCazF4dm9CLVA0MGJWVF9JSiIsIm5iZiI6MTQ3NDU0Njk4Mywic3ViIjoiIn0.516fS692WGHNi5Sc44iB8OFSLairrM6n1zNvVo5KXAxlsxsP4rE7VDmW5d0YqvTYeKfZAYIi9yEptx4xJlQ6DA" https://index.docker.io/v2/alpine/manifests/latest 

…在这里我得到了什么:

 HTTP/1.1 401 Unauthorized Content-Type: application/json; charset=utf-8 Docker-Distribution-Api-Version: registry/2.0 Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:alpine:pull",error="invalid_token" Date: Thu, 22 Sep 2016 12:27:54 GMT Content-Length: 138 Strict-Transport-Security: max-age=31536000 {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Name":"alpine","Action":"pull"}]}]} 

有没有人有这样的想法为什么令牌authentication失败这样简单的stream程?

Www-Authenticate标题中的响应试图告诉您需要什么,尽pipe它可能更有帮助。

首先:你想要的serviceregistry.docker.io

第二件事: scope的存储库名称是不完整的。 官方软件库只有CLI的单一部分名称,比如alpine ,但是在registry中它正确地被称为library/alpine

所以你的令牌请求应该是:

 curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/alpine:pull" 

然后你的图片请求是:

 curl --header "Authorization: Bearer eyJh..." https://index.docker.io/v2/library/alpine/manifests/latest 

然后你会得到回应。