【发布时间】:2019-03-27 20:48:31
【问题描述】:
不久前我看到一篇题为 Inspecting Docker Images without pulling them 的文章,该文章深入了解了本质上使用 REST 调用执行 docker inspect 所需的特定 API 调用的本质。但是,我想知道自那篇文章撰写以来,Docker 注册表 API 是否发生了一些变化。
本文详细介绍了您需要进行三个 REST 调用才能获取有关容器的信息。在公共 Docker 注册表的情况下,它们如下所示:
-
对 auth.docker.io 的 GET 请求以获取令牌
curl "https://auth.docker.io/token?scope=repository:<image>:pull&service=registry.docker.io"在这种情况下,
image可能类似于nginx或docker- 基本上是您正在查找的任何图像。此 REST 调用返回一个令牌以在后续请求中使用。 -
获取清单列表的 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。此调用返回一些 JSON;关键是我们需要提取.config.digest的值。这是我们在最终请求中使用的摘要字符串。 -
最后是一个获取容器配置的 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"}]}]}
关于如何让它发挥作用的任何想法?
【问题讨论】:
-
你使用的图片参数是什么?
-
这似乎并不重要,因为它们都会产生在后续步骤中不起作用的令牌。出于测试目的,我一直在尝试
docker和nginx。
标签: docker curl docker-registry