【问题标题】:How to override/discover CMD/ENTRYPOINT for base image如何覆盖/发现基本映像的 CMD/ENTRYPOINT
【发布时间】:2020-01-27 00:41:09
【问题描述】:

说我有这个:

FROM oresoftware/lmx-broker:0.2.1

ENTRYPOINT ['/docker-entrypoint.sh']

如果我不使用CMDCMD 会默认为基础映像中设置的值吗?我对ENTRYPOINT 的使用会覆盖基本映像中的ENTRYPOINT 吗?我对CMD 的使用会覆盖基本映像中的CMD 吗?

基本上我的目标是覆盖基础映像的入口点,但能够发现/重用 CMD,这样我的 docker-entrypoint.sh 文件将如下所示:

#!/bin/sh

"$@" | capture-stdio

其中 "$@" 将默认为基础映像中的 CMD。

【问题讨论】:

    标签: docker docker-build docker-run docker-entrypoint


    【解决方案1】:

    如果您在 Dockerfile 中使用 ENTRYPOINT ['/docker-entrypoint.sh'],它将覆盖入口点。

    简单来说,如果您使用基本映像中定义的任何内容并在映像中重新定义,它将覆盖其CMDentrypoint 或任何其他配置,如ENV 等。

    在 Dockerfile 中定义入口点后,传递给 CMD 的任何内容都将被视为入口点的参数。

    要查看基本映像的CMDentrypoint,只需运行

    docker inspect oresoftware/lmx-broker:0.2.1
    

    或者查看基础镜像的入口点

    docker run --rm oresoftware/lmx-broker:0.2.1 bash -c "cat path_to_entrypoint"
    
    

    【讨论】:

    • 这不能回答问题。问题如下。假设您这样做,然后您想调用父图像的ENTRYPOINT 和/或CMD,但您从其他地方拉取该图像,因此它们可能会更改。现在该怎么做?您需要动态地弄清楚它们是什么。
    【解决方案2】:

    来自文档:

    注意:如果 CMD 是从基础映像定义的,则设置 ENTRYPOINT 会将 CMD 重置为空值。
    在这种情况下,必须在当前图像中定义 CMD 才能有值。

    因此,要回答您的问题,这是行不通的。 To read more

    祝你好运。

    【讨论】:

    • 太遗憾了,因为用户必须去发现基础镜像中的 CMD 值是什么,然后复制它
    猜你喜欢
    • 2018-08-08
    • 2017-05-03
    • 1970-01-01
    • 2020-10-07
    • 2018-12-31
    • 2017-08-31
    • 2012-02-20
    • 2022-01-09
    • 2018-11-26
    相关资源
    最近更新 更多