找到给定图像的 Dockerfile

Unb*_*ess 4 docker

我正在一台 Linux 机器上工作。我大约 3-4 周前构建了一个 Docker 镜像,但我不记得 Dockerfile 位于哪里。

查找 Dockerfile 的最佳方式是什么?是否有可能以某种方式在给定图像的情况下获取其位置?

我尝试使用:

$ docker image inspect <image>
Run Code Online (Sandbox Code Playgroud)

但它不显示此信息。

Gri*_*kin 6

Docker 镜像不会在 Dockerfile 上存储任何信息,但您可以尝试对其进行逆向工程。对此有几种方法:

  1. 使用docker history <image-name> --no-trunc,它将显示每一层的信息:
> docker history golang:1.14.2-alpine3.11  --no-trunc --format="{{.CreatedBy}}"
/bin/sh -c #(nop) WORKDIR /go
/bin/sh -c mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
/bin/sh -c #(nop)  ENV PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/bin/sh -c #(nop)  ENV GOPATH=/go
...

Run Code Online (Sandbox Code Playgroud)
  1. https://github.com/CenturyLinkLabs/dockerfile-from-image——从 docker 镜像逆向工程 Dockerfile 的项目。你可以这样运行它:
docker run -v /var/run/docker.sock:/var/run/docker.sock \
  centurylink/dockerfile-from-image <IMAGE_TAG_OR_ID>
Run Code Online (Sandbox Code Playgroud)
  1. div实际上是用于调试/优化 docker 映像的工具,但在这种情况下可能会有所帮助