【问题标题】:Execute configuration bash script during docker build在 docker build 期间执行配置 bash 脚本
【发布时间】:2016-09-23 21:16:49
【问题描述】:

在 docker build 期间,我需要运行一个 bash 脚本,它会设置一些环境变量。

脚本如下所示:

#!/bin/bash

export ENVVAR=TEST
export HOST=local
export PORT=port

我尝试以不同的方式在我的 dockerfile 中调用此脚本,但它们都不起作用。我试过这些:

ADD ./myscript.sh
RUN chmod +x /myscript.sh;\
    /bin/bash -c 'source ./myscript.sh';\
    /bin/bash -c 'source /myscript.sh';\
    /bin/bash -c source ./myscript.sh;\
    /bin/bash -c source /myscript.sh;\
    source ./myscript.sh;\
    source /myscript.sh;\
    /myscript.sh;\
    ./myscript.sh;\

ENTRYPOINT ["/bin/bash"]

当然,我的 RUN 中只有这些命令之一,我只是将它们分组放在此处。

如果我运行容器并使用source ./myscript.sh,它会按预期工作。

由于多重限制和其他原因,我无法使用 docker compose、-e 参数、dockerfile 中的 ENV KEY VALUE 或类似方法。我需要在 docker build 过程中设置环境变量。

【问题讨论】:

    标签: linux bash shell docker


    【解决方案1】:

    您根本没有采购 ENTRYPOINT 中指定的外壳。只需将您的 myscript.sh 添加到您的图像中(使用 COPY 而不是 ADD)。

    COPY myscript.sh /usr/local/bin
    

    然后在你的入口点实际启动的 shell 上获取它。

    docker run myimage source /usr/local/bin/myscript.sh
    

    顺便说一句,myscript.sh 是非常不具描述性的。例如,您可以使用 env.sh。

    【讨论】:

    • 谢谢,但是如果我之后根据设置的环境变量使用 shell 脚本进行额外的 RUN,我该怎么办? RUN /configure.sh
    • 然后在运行 configure.sh 之前获取 shell。例如:RUN source myscript.sh && configure.sh
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多