首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不从其他地方推送的情况下检查本地docker镜像是否过时?

如何在不从其他地方推送的情况下检查本地docker镜像是否过时?
EN

Stack Overflow用户
提问于 2017-02-09 21:03:38
回答 3查看 8.9K关注 0票数 23

我正在Coreos服务器上的docker容器中运行react应用程序。假设它是从https://hub.docker.com/r/myimages/myapp的dockerhub中提取出来的。

现在,我想定期检查应用程序容器的dockerhub镜像是否已更新,以查看我在本地运行的镜像是否落后。

与远程映像相比,检查本地docker映像是否过时的最有效方法是什么?到目前为止,我找到的所有解决方案都是bash脚本或推动更新的外部服务。我想找到一个尽可能本地docker的解决方案,并且希望避免从其他地方推送通知(向服务器发送更新的图像)。

EN

回答 3

Stack Overflow用户

发布于 2020-10-12 05:09:39

您可以查询注册表API以获取图像摘要,并将其与您拉取的图像摘要进行比较。

$ cat digest-v2.sh
#!/bin/sh

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

$ ./digest-v2.sh library/busybox:latest
HTTP/1.1 200 OK
Content-Length: 2080
Content-Type: application/vnd.docker.distribution.manifest.list.v2+json
Docker-Content-Digest: sha256:d366a4665ab44f0648d7a00ae3fae139d55e32f9712c67accd604bb55df9d05a
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:d366a4665ab44f0648d7a00ae3fae139d55e32f9712c67accd604bb55df9d05a"
Date: Sun, 11 Oct 2020 21:04:59 GMT
Strict-Transport-Security: max-age=31536000

您可以将该ETag或Docker-Content-Digest标头与之前拉取的图像上的注册表引用进行比较:

$ docker image inspect busybox:latest --format '{{json .RepoDigests}}' | jq .
[
  "busybox@sha256:d366a4665ab44f0648d7a00ae3fae139d55e32f9712c67accd604bb55df9d05a"
]

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

我还一直在开发一些Go API和CLI,以便在您可能需要传递不同类型授权的更多注册表中工作。该项目位于regclient/regclient,其中包含一个regctl命令。

$ regctl image digest --list busybox:latest
sha256:d366a4665ab44f0648d7a00ae3fae139d55e32f9712c67accd604bb55df9d05a
票数 5
EN

Stack Overflow用户

发布于 2017-02-19 19:25:32

如果您使用的是Docker Hub,您可以使用Webhook通知docker主机更新,并对此采取行动。

使用webhook将是一种“简单”的方法(我认为),否则您将不得不在docker pull中进行某种爬行,或者正如@alebianco所解释的那样,比较一些散列或构建/创建日期。

下面是关于它的文档:https://docs.docker.com/docker-hub/webhooks/

票数 4
EN

Stack Overflow用户

发布于 2017-05-15 16:04:22

我用一个爬虫解决了这个问题,它可以直接检查Dockerfile,也可以检查from字符串。

我把所有的东西都备份到了一个可以在docker hub中找到的docker镜像中。

我只需在我的gitlab ci管道中运行该映像。如果基础图像已过时,则会打印所有较新的版本,以便您可以轻松地选择标签。

链接:https://hub.docker.com/r/olafnorge/docker-image-crawler/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42137511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档