【问题标题】:How to check for Certain Properties in Docker Images如何检查 Docker 映像中的某些属性
【发布时间】:2017-08-23 01:59:20
【问题描述】:

我的组织中有一组 Docker 基础映像。每个技术堆栈(例如 Java 或 Python)我都有一个。我还可以为特定版本的 Java 构建这些基础映像并将其推送到工件。

然后我们会有不同的项目使用这些基础镜像并构建他们的 Dockerfile。我们现在想以某种方式确保在这些项目的构建过程中,他们确实使用了我在他们的 Dockerfile 中创建的基础镜像!

例如,如果我在 Alipine 上为 Java 创建的图像被称为

java-8-alpine-3

那么需要 Java 运行时的项目应该将其作为第一行:

FROM java-8-alipne-3

我如何确保是这种情况?换句话说,我如何检查图像以检查这些属性的使用情况?

【问题讨论】:

    标签: docker


    【解决方案1】:

    对于特定的图像,您可以使用世纪链接图像,它将对 docker 图像进行逆向工程

    docker run -v /var/run/docker.sock:/var/run/docker.sock \
    centurylink/dockerfile-from-image <IMAGE_TAG_OR_ID>
    

    click here for more info

    不幸的是,世纪链接图像使用了 docker tree 命令,该命令已被贬值,因此另一种解决方案是使用它

    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock 
    nate/dockviz images -t
    

    它会显示所有你可以检查的层然后检查所有层。

    【讨论】:

    • 什么是 $INSTANCE_ID?是我要检查的图像的名称吗?
    • .Config.Image 标志是否对应于我可以检查我的基本图像是否被使用的 FROM 标签?
    • well instance_id 是正在运行的 docker 实例的名称
    • 我想检查 Docker Image 而不是正在运行的容器实例
    • 不!那不是我想要的!我希望能够在静态图像上而不是在正在运行的容器上做到这一点!
    【解决方案2】:

    你不能得到FROM 行只有图像。

    您可以使用docker history --no-trunc image_name 获取图像的历史记录,但您无法获取FROM 行。

    查看 Docker 论坛上的此主题以获取更多信息:https://forums.docker.com/t/how-can-i-view-the-dockerfile-in-an-image/5687/3

    【讨论】:

    • 不!这不是我想要的!我想很明显我希望能够在 Dockerfile 中识别父图像!
    • 这是不可能的,正如我在回答中的链接中所述。
    • 看我更新的答案,因为世纪链接图像被破坏,一个固定的存在
    【解决方案3】:

    如果您只需要知道用于构建图像的 FROM xxx 行,就这样做

    docker history --no-trunc my_image

    你会得到这些信息

    文档

    https://docs.docker.com/engine/reference/commandline/history/

    编辑:

    https://hub.docker.com/r/dduvnjak/dockerfile-from-image/

    是固定版本的

    https://github.com/CenturyLinkLabs/dockerfile-from-image/issues/14

    不再有效

    例如

    $ docker run -v /var/run/docker.sock:/var/run/docker.sock dduvnjak/dockerfile-from-image k3ck3c/nethogs FROM alpine:latest RUN apk update && apk add wget&& wget --no-check-certificate -c http://github.com/raboof/nethogs/archive/v0.8.1.tar.gz && tar zvxf v0.8.1.tar.gz && cd ./nethogs-0.8.1/ && echo "export ARCH=x86" >> Makefile && apk add sudo linux-headers ncurses-dev libpcap-dev make g++&& echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && apk update && apk add libpcap libstdc++ libgcc nethogs@testing&& make && sudo make install&& apk del sudo g++ make linux-headers ncurses-dev libpcap-dev libpcap libgcc libstdc++ && rm -rf /var/cache/apk/* ./nethogs-0.8.1/

    显示

    FROM

    线正确

    或者只是

    $ docker run -v /var/run/docker.sock:/var/run/docker.sock dduvnjak/dockerfile-from-image k3ck3c/nethogs | grep FROM FROM alpine:latest

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2022-11-03
    • 2015-06-14
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多