如何知道一个Docker镜像来自哪里

35次阅读
没有评论

问题描述

在系统中有一个Docker镜像12346789ABCD,想知道它是从哪里来的。具体来说,他想知道它是在本地构建的还是从仓库下载的,如果是后者,他想知道是从哪个仓库下载的。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

通常,如果镜像来自一个仓库,你可以在镜像的名称中看到(如果它不是来自默认的仓库Docker Hub)。Quay的镜像看起来像quay.io/<namespace>/<image name>:<tag>
有些镜像可能来自其他地方。例如,使用FROM: scratch构建的镜像和使用docker import命令创建的镜像将不会与任何仓库关联。这些是著名的none:none镜像(没有仓库和标签)。在这种情况下,你只有ID(SHA),你需要像福尔摩斯(或杰西·弗雷泽尔)一样找到匹配的内容。
因此,你只能看到清单中写的内容。你应该相信它吗?清单可以使用docker content trust进行签名,即使镜像本身的内容没有被签名。如果你需要更多关于来源的确定性,你可能需要使用notary来确保信任在整个委托链中得到维护。
希望这回答了你的问题。

方案2

使用脚本或工具来探索镜像的内容可能会增加复杂性,并且需要确保镜像的来源可靠。
另一种方法是编写脚本或使用工具来探索镜像的内容。你可以使用docker run命令启动一个容器来查看镜像的内容。
以下是一个简单的bash脚本示例,可以启动一个容器来探索镜像的内容:

#!/bin/bash
# 启动一个容器来探索镜像的内容
docker run -it --rm <image_id> /bin/bash

在这个示例中,我们使用docker run命令启动一个容器,并使用-it选项进入交互模式。--rm选项表示容器在退出后将被自动删除。<image_id>是你要探索的镜像的ID。
启动容器后,你可以在容器中执行各种命令来查看镜像的内容,例如lscat等。
请注意,这种方法只适用于已经下载到本地的镜像。如果镜像尚未下载,你需要先使用docker pull命令将其下载到本地。

正文完