gpt4 book ai didi

docker - 基于另一个 ENV 变量的变量的条件集

转载 作者:行者123 更新时间:2023-12-02 19:21:04 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Conditional ENV in Dockerfile

(8 个回答)


2年前关闭。




在给定的 Dockerfile 中,我想根据另一个 ENV 变量的内容设置一个变量(预先注入(inject)到容器中,或在 Dockerfile 中定义)

我正在看这样的东西

FROM centos:7
ENV ENABLE_REMOTE_DEBUG "true"

ENV DEBUG_FLAG=""
RUN if [ "$ENABLE_REMOTE_DEBUG" = "true" ] ; then echo "set debug flag" ;export DEBUG_FLAG="some_flags"; else echo "remote debug not set" ; fi

RUN echo debug flags: ${DEBUG_FLAG}

## Use the debug flag in the Entrypoint : java jar ${DEBUG_FLAG} ...

这个 Dockerfile 的问题是 $DEBUG_FLAG未正确设置(或未在下一行中使用?)...因为输出为空:
debug flags:


我在这里想念什么? (我不喜欢调用外部 bash 脚本)

最佳答案

让我们看看使用 Dockerfile 构建 Docker 镜像时发生了什么。

每一行,都在一个新的容器中执行。在解释该行之后,生成的容器状态将保存在临时镜像中,并用于为下一个命令启动容器。

除了磁盘上的文件、特定于 Docker 的属性(如 EXPOSE)和一些图像设置之外,此临时图像不保存任何状态。临时镜像具有使用缓存快速后续构建的优势。

现在提出您的问题,如果您想使用 运行 而不是用shell脚本编写,这是一个解决方法

RUN if [ "$ENABLE_REMOTE_DEBUG" = "true" ] ; then echo "set debug flag" ;echo 'export DEBUG_FLAG="some_flags"' >>/tmp/myenv; else echo "remote debug not set" ; fi

RUN source /tmp/myenv;echo debug flags: ${DEBUG_FLAG}

由于镜像基于 CentOS,默认 shell 是 bash,因此获取您自己的环境文件可以正常工作。在 source 可能无法工作的其他 shell 中,读取文件会有所帮助。

关于docker - 基于另一个 ENV 变量的变量的条件集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59710802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com