我在Coreos服务器上的一个Docker容器中运行一个react应用程序,假设它是从https://hub.docker.com/r/myimages/myapp
的dockerhub中提取出来的。
现在我想定期检查应用程序容器的dockerhub映像是否已经更新,看看我在本地运行的映像是否落后。
检查本地docker镜像是否比远程镜像过时的最有效方法是什么?到目前为止,我找到的所有解决方案都是bash脚本或外部服务,它们会推送更新。我希望找到一个尽可能适合docker的解决方案,并且希望避免从其他地方推送通知(提醒服务器有更新的镜像)。
5条答案
按热度按时间5sxhfpxr1#
您可以查询注册表API以获取图像摘要,并将其与所提取的内容进行比较。
您可以将ETag或Docker-Content-Digest标头与之前提取的映像上的注册表引用进行比较:
我还在开发一些Go语言的API和CLI,以便与更多的注册中心一起工作,在这些注册中心中,你可能需要传递不同类型的授权。
ne5o7dgx2#
如果您正在使用Docker Hub,则可以使用Webhook通知Docker主机有关更新的信息,并对此采取操作。
使用webhook将是“简单”的方法(我认为),否则您将不得不在docker拉中进行某种爬行,或者如@alebianco所解释的那样,比较一些散列或构建/创建日期。
下面是关于它的文档:https://docs.docker.com/docker-hub/webhooks/
sqyvllje3#
有一个用于Docker Hub的API available
您应该能够获得标记列表,并从那里获得清单详细信息
我做了一些调查,看起来他们没有暴露任何类型的图像校验和,它的清单或组成它的层。
我找到的最接近的东西是创建日期...如果你想做一些远程安全的东西,我不建议你使用它。
不管怎样,你得先拿到通行令牌
从响应中提取令牌,然后可以加载映像版本的清单
查看返回的json的history对象,你会发现一个 * created * 属性。
然后,您可以使用获取本地映像的创建日期
把两者比较一下然后畏缩...
uubf1zoe4#
Issue 30906(检查本地容器映像是否过期的Docker命令?)刚刚提到(2023年1月):
您可以尝试使用**Diun**执行此任务。
它检查更新,然后可以通过许多提供程序通知您。
DockerI Mage UpdateNotifier是一个用Go语言编写的CLI应用程序,作为单个可执行文件(和Docker映像)交付,用于在Docker注册表中更新Docker映像时接收通知。
在Go语言中,这可以通过Go语言支持的所有平台和架构上的独立二进制分布来实现。
请参阅Marco d'Aleo博客文章“DIUN: Docker Image Update Notifier“
Diun支持很多服务,但对于这类项目我通常选择Telegram。
gab6jxml5#
我用一个直接检查Dockerfile或
from
字符串的爬虫解决了这个问题。我把所有东西都备份到一个可以在docker hub中找到的Docker映像中。
我只是在我的gitlabci管道中运行图像,如果基本图像过时,is会打印所有较新的版本,这样你就可以很容易地选择标签。
链接:https://hub.docker.com/r/olafnorge/docker-image-crawler/