不久前,我读到一篇文章,标题为Inspecting Docker Images without pulling them,它深入到了使用REST调用执行docker inspect
所需的特定API调用的细节。但是,我想知道,自从那篇文章写出来之后,Docker注册表API是否发生了变化。
本文详细介绍了您需要进行三次REST调用,以获取有关容器的信息。对于公共Docker注册表,它们如下所示:
1.发送到auth.docker.io以获取令牌的GET请求
curl "https://auth.docker.io/token?scope=repository:<image>:pull&service=registry.docker.io"
在这种情况下,image
可以是nginx
或docker
-基本上是您要查找的任何图像。
1.检索清单列表的GET请求
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json"
-H "Authorization: Bearer <token-from-step-1>"
"https://registry-1.docker.io/v2/<image>/manifests/<tag>"
这里的image
与步骤1中的相同,tag
可以是latest
。关键是我们需要提取.config.digest
处的值。这是我们在最终请求中使用的摘要字符串。
1.最后是一个GET请求,使用我们在步骤2中收到的摘要来检索容器配置
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json"
-H "Authorization: Bearer <token-from-step-1>"
"https://registry-1.docker.io/v2/<image>/blobs/<digest-from-step-2>"
这将返回一些JSON,而我关心的字段是.config
我能够在一个私有的Docker注册表上成功地测试这个,尽管我不得不在那里做一些不同的auth.但是当我尝试按照公共Docker注册表的指南(我在上面的步骤中概述了)进行操作时,我遇到了相反的问题:步骤1给了我一个令牌,但这个令牌没有价值。每当我尝试在步骤2或3中使用它时,我得到的结果是:
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"docker","Action":"pull"}]}]}
有什么办法让它工作吗?
2条答案
按热度按时间zlhcx6iw1#
使用以下步骤,您可以检索任何公共容器映像的配置。
1.获取映像的相应令牌。请注意,您必须指定映像的全名(正式映像使用
library
存储库)。因此,NGINX image应被称为:library/nginx
.1.从清单中检索图像摘要。对于此请求,还需要指定有效的标记(此示例使用
latest
标记)。256:2bcb04bdb83f7c5dc30f00edaca1609a716bda1c7d2244d4f5fbbdfeff33da366c的一个新的数据库,它是一个新的数据库。
1.最后,使用以下请求获取容器配置。在URL中,必须指定第二步中的摘要。
k7fdbhmy2#
本文详细介绍了您需要进行三次REST调用,以获取有关容器的信息。
关于图像
最后是一个GET请求,用于检索容器配置
映像配置
显示图像配置的脚本。它与专用注册表和Docker Hub一起使用。对于基本的身份验证注册表,您需要提供第二个参数(
user:pass
)。用法:
关于使用API的几点说明:
user/name
的形式(例如nginxproxy/nginx-proxy
)。但对于官方存储库(所有实际上都以library/
开始)可以省略第一段,(library/ruby
-〉ruby
)。也可能只有一个段(例如在私有注册表中),有时第一部分单独被称为仓库(示例)。/v2/_catalog
路由。