检查来自Dockerhub的图像,而不拉取该图像

  • 本文关键字:图像 Dockerhub docker
  • 更新时间 :
  • 英文 :


例如,我有一个Alpine图像从Dockerhub拉。只要用docker pull alpine。它被标记为当前日期(比如2019-12-12)。所以现在我想更新图像,但首先我想检查latest或最新版本的最后更新日期,然后再拉出它。

对于本地映像,我们可以使用docker inspect alpine:latest。有什么API或命令可以完成吗?

就像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

事实上,从输出中,您可以看到它检查清单列表的摘要,所以我不相信它甚至在第二个查询中提取清单,它可以通过简单的head请求进行检查。至于为什么第一次提取提到了a0d0a0d46f8b: Already exists,如果基于阿尔卑斯图像的另一张图像被提取,那么底层应该已经被检索到了。

如果你想直接检查注册表中的数据,而不需要拉出图像和图层,有很多工具可以做到这一点。我知道的包括RedHat的skopeo, google的crane (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
}
]
}

最新更新