gpt4 book ai didi

docker - 如何在所有用户启动容器时在Docker容器系统范围内设置环境变量?

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

我需要为docker容器内的所有用户和进程设置一些环境变量。应该在容器启动时设置它,而不是在Dockerfile中设置,因为它取决于运行环境。

所以简单的Dockerfile

FROM ubuntu
RUN echo 'export TEST=test' >> '/root/.bashrc'

非常适合互动 session docker run -ti test bash然后 env还有 TEST=test
但是当 docker run -ti test env时没有 TEST
我在尝试
RUN echo 'export TEST=test' >> '/etc/environment'
RUN echo 'TEST="test"' >> '/etc/environment'
RUN echo 'export TEST=test' >> /etc/profile.d/1.sh
ENTRYPOINT export TEST=test

没有任何帮助。

为什么我需要这个。我在由docker自动设置的容器内部设置了 http_proxy变量,我需要基于它设置另一个变量,即 JAVA_OPT,在所有用户和进程中以及在运行环境中(而不是在构建时)在整个系统范围内进行设置。

最佳答案

我将创建一个脚本作为入口点:

#!/bin/bash

# if env variable is not set, set it
if [ -z $VAR ];
then
# env variable is not set
export VAR=$(a command that gives the var value);
fi

# pass the arguments received by the entrypoint.sh
# to /bin/bash with command (-c) option
/bin/bash -c $@

在Dockerfile中,我将设置入口点:
ENTRYPOINT entrypoint.sh

现在,每次我运行 docker run -it <image> <any command>时,它都会使用我的脚本作为入口点,因此将始终在命令之前运行它,然后将参数传递到正确的位置 /bin/bash

改进措施

如果您始终使用带有参数的入口点,那么上面的脚本就足够了,否则您的 $@变量将为空,并给您一个错误 /bin/bash: -c: option requires an argument。一个简单的解决方法是一个if语句:

if [ ! -z $@ ];
then
/bin/bash -c $@;
fi

关于docker - 如何在所有用户启动容器时在Docker容器系统范围内设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56484003/

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