我在做一台Linux机器。我在3-4周前建立了一个码头形象,但我不记得Dockerfile在哪里。
找到Dockerfile的最佳方法是什么?有可能以某种方式得到它的位置给出图像吗?
我试着用:
$ docker image inspect <image>但它并没有显示这些信息。
发布于 2020-04-23 15:29:57
Docker图像不存储Dockerfile上的任何信息,但是您可以尝试反向工程它。实现这一目标的方法很少:
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
...docker run -v /var/run/docker.sock:/var/run/docker.sock \
centurylink/dockerfile-from-image <IMAGE_TAG_OR_ID>发布于 2020-04-23 15:32:53
在图像和用于构建它的物理文件之间不会有直接的链接。
您可以尝试搜索dockerfile,就好像它是任何其他文件一样。
find / -name "Dockerfile" -print例如。
如果您或多或少知道Dockerfile上次编辑的时间:
find / -newermt "2020-01-01" ! -newermt "2020-04-31"等。
如果您不知道dockerfile是什么,但是您可以记住其中的一个命令。查找作为grep:
find . -type f -exec grep "FROM:mongo:latest" '{}' \; -print这都是标准的查找材料,特别是与码头无关。
现在让我们假设这仍然不适用于您,或者您有1000 s如果返回的dockerfile和匹配正确的一个与您的图像仍然是有问题的。
您可以尝试从图像中重建dockerfile。这个答案:https://stackoverflow.com/a/30793515/7281447
或
这个答案:https://stackoverflow.com/a/33918866/7281447
或者这个答案:https://stackoverflow.com/a/30793515/7281447
描述一下这样做的方法。但你是“逆向工程”的码头文件从图像。也就是说,有些信息可能过于冗长或完全丢失。它不会产生清洁,(好评论!)首先,您用来创建图像的dockerfile。
但是,现在您有了用于生成图像的历史命令列表。您可以尝试从这个列表中选择独特的命令,并将它们插入到find w/ grep命令中。我首先从最新的命令开始,因为您不太可能查看那些在FROM映像中生成的命令(如果您的工具无法区分它们)。
编辑:当问题声明他们不知道文件的位置,答案假设它仍然在某个文件系统中,或者在一组已知的文件系统中。我想不一定是这样的。
https://stackoverflow.com/questions/61390606
复制相似问题