在我的docker镜像的构建阶段,我想为每个后续的" RUN"自动设置一些环境变量。命令。
但是,我想在docker conatiner中设置这些变量,因为设置它们取决于某些内部逻辑。
使用dockerfile" ENV"命令不好,因为不能依赖内部逻辑。 (它不能依赖于在docker容器内运行的命令)
通常(如果这不是docker)我会设置我的〜/ .profile文件。但是,docker不会在非交互式shell中加载此文件。
所以在他们的时刻我必须用:
运行每个docker RUN命令RUN bash -c "source ~/.profile && do_something_here"
但是,每当我想要运行bash命令时,我必须重复此操作,这非常繁琐(而且不干净)。还有其他的"个人资料"我可以改用文件。
答案 0 :(得分:1)
您可以尝试将arg设置为env
ARG my_env
ENV my_env=${my_env}
在Dockerfile中,
传递' my_env = prod'在build-args中,以便您可以将set env用于后续的RUN命令
在堆栈部署的情况下,您也可以在docker compose yml文件中使用env_file:
选项
答案 1 :(得分:0)
我遇到了类似的问题,无法找到满意的解决方案。我所做的是创建一个可以获取变量的脚本,然后进行操作。然后我会重写 Dockerfile 中的RUN
命令来改为使用该脚本。
在您的情况下,如果您需要运行多个命令,您可以创建一个加载变量的包装器,运行作为参数给出的命令,并将该脚本包含在docker镜像中。