default is "root" USER $my_user ENV USER=$my_user 到目前为止一切都很好-6ren">
gpt4 book ai didi

docker - Dockerfile中的条件逻辑,使用--build-arg

转载 作者:行者123 更新时间:2023-12-02 19:31:10 30 4
gpt4 key购买 nike

说我有这个:

ARG my_user="root"  # my_user => default is "root"
USER $my_user
ENV USER=$my_user

到目前为止一切都很好,但是现在我们到达了这里:
ENV HOME="/root"

有没有办法做这样的事情:
ENV HOME $my_user === "root"? "/root" : "/home/$my_user"

显然,这是错误的语法。

我能想到的唯一解决方案是仅使用两个--build-args,如下所示:
docker build -t zoom \
--build-arg my_user="foo" \
--build-arg my_home="/home/foo" \
.

最佳答案

不幸的是你不能直接做到这一点

https://forums.docker.com/t/how-do-i-send-runs-output-to-env-in-dockerfile/16106/3

所以你有两种选择

在开始时使用shell脚本

您可以在开始时使用shell脚本

CMD /start.sh

start.sh中,您可以拥有该逻辑
if [ $X == "Y" ]; then
export X=Y
else
export X=Z
fi

创建配置文件环境变量
FROM alpine

RUN echo "export NAME=TARUN" > /etc/profile.d/myenv.sh
SHELL ["/bin/sh", "-lc"]
CMD env

然后你当你运行它
$ docker run test
HOSTNAME=d98d44fa1dc9
SHLVL=1
HOME=/root
PAGER=less
PS1=\h:\w\$
NAME=TARUN
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
CHARSET=UTF-8

Note: The SHELL ["/bin/sh", "-lc"] is quite important here, else the profile will not be loaded

Note2: Instead of RUN echo "export NAME=TARUN" > /etc/profile.d/myenv.sh you can also do a COPY myevn.sh /etc/profile.d/myenv.sh and have the file be present in your build context

关于docker - Dockerfile中的条件逻辑,使用--build-arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073068/

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