【问题标题】:How to inspect a docker image in docker hub?如何检查 docker hub 中的 docker 镜像?
【发布时间】:2015-06-10 07:45:06
【问题描述】:

有没有办法为 docker hub 上存在且未在本地拉取的图像执行 docker inspect

当谈到 docker hub 时,我对 docker cli 的使用有点困惑。我可以docker login,但不能使用该登录名执行除拉或推以外的任何远程操作。

【问题讨论】:

标签: docker dockerhub


【解决方案1】:

根据 docker hub 文档 -

Docker 本身通过 docker 提供对 Docker Hub 服务的访问 搜索、拉取、登录和推送命令。

看起来你不能在不拉取一张图像的情况下进行 docker 检查

【讨论】:

  • 我猜它是在拉然后检查然后...真可惜
【解决方案2】:

有一个 API 可以做到这一点。 Docker 提供了他们的registry 2 API,最近,发布了 OCI distribution-spec。这包括如何在注册表中查询清单和 blob。在注册表中,您最有可能在 config blob 中查找,它是 json 格式,并且具有您在 docker inspect 中看到的几乎所有相同的字段。

较少涉及的是身份验证,根据注册表的不同,这可能会变得有点复杂。 Docker Hub 使用不记名令牌,因此提取清单和带有匿名不记名令牌的配置的示例脚本如下所示:

#!/bin/sh

ref="${1:-library/ubuntu:latest}"
repo="${ref%:*}"
tag="${ref##*:}"
token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull"
 \
        | jq -r '.token')
digest=$(curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
              -H "Authorization: Bearer $token" \
              -s "https://registry-1.docker.io/v2/${repo}/manifests/${tag}" \
         | jq -r .config.digest)
curl -H "Accept: application/vnd.docker.container.image.v1+json" \
     -H "Authorization: Bearer $token" \
     -s -L "https://registry-1.docker.io/v2/${repo}/blobs/${digest}" | jq .

有多种工具可以为您执行所有这些 API 调用。我的头顶是:

  • RedHat 的 Skopeo
  • go-containerregistry 的起重机 CLI
  • regclient 的 regctl CLI

作为 regclient 的作者,我有点偏见。生成的命令如下所示:

$ regctl image inspect localhost:5000/library/alpine:latest
{
  "created": "2021-08-27T17:19:45.758611523Z",
  "architecture": "amd64",
  "os": "linux",
  "config": {
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/bin/sh"
    ]
  },
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:e2eb06d8af8218cfec8210147357a68b7e13f7c485b991c288c2d01dc228bb68"
    ]
  },
  "history": [
    {
      "created": "2021-08-27T17:19:45.553092363Z",
      "created_by": "/bin/sh -c #(nop) ADD file:aad4290d27580cc1a094ffaf98c3ca2fc5d699fe695dfb8e6e9fac20f1129450 in / "
    },
    {
      "created": "2021-08-27T17:19:45.758611523Z",
      "created_by": "/bin/sh -c #(nop)  CMD [\"/bin/sh\"]",
      "empty_layer": true
    }
  ]
}

【讨论】:

    最近更新 更多