从 Dockerhub 检查镜像而不拉取镜像

问题描述 投票:0回答:2

例如,我有一个从 Dockerhub 中提取的

Alpine
镜像。只需使用
docker pull alpine
即可。它被标记为当前日期(比如说 2019-12-12)。 所以现在我想更新图像,但首先我想在拉取之前检查
latest
或最新版本的上次更新日期。

对于本地图像,我们可以使用

docker inspect alpine:latest
。有没有任何API或命令可以完成这个任务?

docker
2个回答
1
投票

就像 David 在评论中所说,

docker pull
只会拉动已更改的图层。

$ docker pull alpine:latest
latest: Pulling from library/alpine
a0d0a0d46f8b: Already exists
Digest: sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

$ docker pull alpine:latest
latest: Pulling from library/alpine
Digest: sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a
Status: Image is up to date for alpine:latest
docker.io/library/alpine:latest

事实上,从输出中,您可以看到它检查清单列表的摘要,所以我不相信它甚至在第二个查询上提取清单,它可以通过简单的头请求进行检查。至于为什么第一次拉取时提到

a0d0a0d46f8b: Already exists
,如果拉取另一个基于该 Alpine 图像的图像,那么底层就已经被检索到了。

如果您确实想直接从注册表检查数据而不提取映像和图层,可以使用多种工具来实现。我知道的包括 RedHat 的 skopeo、Google 的起重机(go-containerregistry 的一部分),我开发了一个 regclient 项目,其中包括

regctl
:

之类的命令
$ regctl image digest --list alpine:latest
sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a

您可以将其与 docker 在图像中看到的内容进行比较:

$ docker image inspect alpine:latest --format '{{.RepoDigests}}'
[alpine@sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a]

它还允许您在不下载图层的情况下检查图像配置:

$ regctl image config 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
    }
  ]
}

0
投票

使用 v2 清单格式,现在可以通过以下方式完成:

docker manifest inspect -v <image>

“docker manifest”命令被视为“实验性”命令,API 可能会在未来版本中发生变化。

https://docs.docker.com/reference/cli/docker/manifest/inspect/

© www.soinside.com 2019 - 2024. All rights reserved.