【问题标题】:find corresponding docker images of docker layers找到docker层对应的docker镜像
【发布时间】:2018-08-21 09:27:18
【问题描述】:

我们使用 nexus oss 3.13 作为私有 docker 注册表。 在开发过程中,由于配置错误,一些图像/图层可能会变得非常大。

目前我们有一个 nexus groovy 脚本,它生成最大文件 (==layer) 的报告,但无法找到相应的图像。

对于生产来说,这是一个表演障碍。因此我们不能删除使用大图层的图像,因为我们不知道哪个图像受到影响。

我们很惊讶,没有提供这样的基本功能。

我们是否遗漏了文档中的某些内容?

其他人是如何解决这个问题的?

是否有人有一个好的方法/解决方法(可能是一个 groovy 脚本)来匹配 docker 层和 docker 图像以解决这个问题?

【问题讨论】:

    标签: image docker layer docker-registry nexus3


    【解决方案1】:

    您可以复制层的非截断 ID (SHA256) 并在文件夹 /var/lib/docker/image 中对其进行 grep。

    这将找到一个具有 SourceRepository JSON 字段的文件:

    $/var/lib/docker/image# find . -name *aae63f31dee9107165b24afa0a5e9ef9c9fbd079ff8a2bdd966f8c5d8736cc98*
    ./overlay2/distribution/v2metadata-by-diffid/sha256/aae63f31dee9107165b24afa0a5e9ef9c9fbd079ff8a2bdd966f8c5d8736cc98
    

    那么当我们cat那个文件时,我们可以看到我上面提到的SourceRepository字段:

    /var/lib/docker/image# cat ./overlay2/distribution/v2metadata-by-diffid/sha256/aae63f31dee9107165b24afa0a5e9ef9c9fbd079ff8a2bdd966f8c5d8736cc98
    [{"Digest":"sha256:9931fdda3586a52049081bc78fa9793476662310356127cc8baa52e38bb34a8d","SourceRepository":"docker.io/library/mysql","HMAC":""}]
    

    在上面我们可以看到源图像是“MySQL”,我随机选择了一个层。

    目前我不相信有内置的方法可以实现这一点,也许值得提交功能请求。

    【讨论】:

    • 在 nexus docker 注册表中,无法浏览目录结构。 nexus 存储库在 nexus blob-stores 中组织。不幸的是,这些 blob 存储不是普通目录。
    • @bulle 您可以对图像进行本地拉取,并编写上述脚本,以便为您找到图像。这并不理想,但这是我目前提出的最接近的工作解决方案。
    • 好的,感谢您的努力,但是有一个问题。位于注册表中的层在 docker push 期间被压缩。所以他们有另一个哈希值,我无法与我之前通过 groovy 脚本找到的哈希值进行比较...
    • 我们现在的解决方案是,使用脚本获取所有清单并在其中搜索太大的层..
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2020-01-28
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2015-01-28
    相关资源
    最近更新 更多