【问题标题】:Docker ENTRYPOINT variable not carried forward into CMDDocker ENTRYPOINT 变量未结转到 CMD
【发布时间】:2019-05-05 21:16:37
【问题描述】:

我有一个基础镜像,它在它的 ENTRYPOINT shell 脚本 docker-entry.sh 中导出了许多变量。

现在我正在使用基本映像并使用 mongo-entry.sh 运行 CMD。我希望访问从 mongo-entry.sh 中的 ENTRYPOINT 导出的变量。

我可以看到打印出来自 docker-entry.sh 的变量的日志语句,但是我无法在 mongo-entry.sh 中访问它

我已经尝试在我的 DockerFile 中将 docker-entry.sh 和 mongo-entry.sh 作为 ENTRYPOINT 调用

代码:

基础图像入口点 docker-entry.sh

 export var1 = "var1"

当前图片

FROM 'baseimage'
COPY ["mongo-entry.sh"]
CMD ["mongo-entry.sh"]

mongo-entry.sh

echo "var1=$VAR1"

输出

var1=

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    我怀疑有 1-2 个问题:

    1. ENTRYPOINTCMD 不是从 FROM 图像继承的
    2. 您可能正在使用ENTRYPOINT|CMD 的执行形式

    ENTRYPOINTCMD 有两种形式,shell 和 exec 形式。 exec 形式“不调用命令外壳”,因此您不会得到环境变量处理:

    https://docs.docker.com/engine/reference/builder/#cmd

    这是一个示例,它显示了 ENV 值通过 FROM 的图像传递:

    echo '
    FROM bash
    ENV DOG=Freddie
    ENTRYPOINT echo "dog=${DOG}"
    ' | docker build --tag=1st --file=- .
    
    echo '
    FROM 1st
    ENV CAT=Emmett
    ENTRYPOINT echo "dog=${DOG}" "cat=${CAT}"
    ' | docker build --tag=2nd --file=- .
    
    docker run 1st
    docker run 2nd
    

    结果:

    dog=Freddie
    dog=Freddie cat=Emmett
    

    NB ${DOG}(及其值)继承自 1st

    【讨论】:

    • 你是对的...基本图像入口点`export var1 = "var1"`当前图像``` FROM 'baseimage' COPY ["custom.sh"] CMD ["custom.sh" ] ``` custom.sh ``` echo $VAR1 ``` 输出
    • 我在 exec 模式下运行它,它产生了一个不同的进程。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2020-07-04
    • 2019-05-02
    • 2018-08-08
    • 2015-05-05
    相关资源
    最近更新 更多