如何查看每个 docker 镜像的 Dockerfile?

问题描述 投票:0回答:4

我有以下 docker 镜像。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              48b5124b2768        2 months ago        1.84 kB
docker/whalesay     latest              6b362a9f73eb        22 months ago       247 MB

有没有办法可以查看本地系统上每个 docker 镜像的 Dockerfile?

在哪里查看 Docker 镜像的 Dockerfile? 的答案对我没有帮助,因为它没有准确显示 Dockerfile,但运行命令来创建镜像。我想要 Dockerfile 本身。

docker dockerfile docker-image
4个回答
75
投票

据我所知,不,你不能。由于 Dockerfile 用于构建镜像,因此它不与镜像本身打包在一起。这意味着您应该对其进行逆向工程。您可以在图像或容器上使用

docker inspect
,从而了解其配置方式。图像的图层也是可见的,因为您在拉取特定图像时拉动它们,所以这也不是秘密。

但是,您通常可以在 Dockerhub 上的镜像存储库中看到 Dockerfile。我不能说大多数存储库都附加了 Dockerfile,但我看到的大多数存储库都附带了它。 不同的存储库维护者可能会选择不同的方式来记录 Dockerfile。如果设置了自动构建,您可以在存储库页面上看到 Dockerfile 选项卡。但是,当有多个并行版本可用时(例如

Ubuntu

),维护者通常选择在描述中放置不同版本的 Dockerfile 链接。如果你看一下这里:https://hub.docker.com/_/ubuntu/,在“支持的标签”下(同样,对于 Ubuntu),你可以看到有指向多个 Dockerfile 的链接,每个 Dockerfile 都有各自的链接。 Ubuntu 版本。


20
投票
docker history <image name>

命令查看里面的内容。 检查这个:

答案链接

TL;博士 因此,如果你有一个由 dockerfile 构建的 docker 镜像,你可以恢复这些信息(除了原始的 FROM 命令之外的所有信息,这很重要,我会同意这一点。但你经常可以猜到它,特别是通过输入容器并询问“你是什么操作系统?”)。然而,图像的制作者可能有你永远不知道的手动步骤,而且他们可以只导出图像,然后重新导入它,此时不会有中间图像。


17
投票

希望有帮助!


6
投票
save

将图像放入

image.tar
文件中。接下来提取文件并尝试探索是否可以在任何层目录中找到 Dockerfile。
docker image save -o hello.tar hello-world

这将输出一个 
hello.tar

文件。

hello.tar

是压缩的输出图像文件,

hello-world
是您要保存的图像的名称。
之后,解压压缩文件并浏览图像层目录。您可能会在其中一个目录中找到 Dockerfile。

但是,有一点需要注意,如果构建图像时忽略了

Dockerfile

中的

.dockerignore
。那么通过这种方法你将找不到
Dockerfile
    

© www.soinside.com 2019 - 2024. All rights reserved.