Docker Ubuntu环境变量

问题描述:

在Docker镜像的编译阶段,我想为每个后续的“RUN”命令自动设置一些环境变量。Docker Ubuntu环境变量

但是,我想从docker conatiner中设置这些变量,因为设置它们取决于一些内部逻辑。

使用dockerfile“ENV”命令并不好,因为它不能依赖于内部逻辑。 (它不能依赖在码头集装箱内运行的命令)

通常(如果这不是码头)我会设置我的〜/ .profile文件。但是,docker不会在非交互式shell中加载此文件。

所以他们时刻我必须与运行每个搬运工人运行命令:

RUN bash -c "source ~/.profile && do_something_here" 

然而,这是非常繁琐(和不洁的)时,我有这个,我想运行bash命令每次都重复。是否有其他的“配置文件”文件可以使用。

我有类似的问题,找不到满意的解决方案。我所做的是创建一个脚本来源变量,然后执行操作。然后,我会重写Dockerfile中的RUN命令,以改为使用该脚本。

就你而言,如果你需要运行多个命令,你可以创建一个包装器来加载变量,运行命令给出的参数,并将该脚本包含在docker镜像中。

,你可以尝试设置ARG作为ENV像Dockerfile, 这 ARG my_env ENV my_env=${my_env} 并通过了“my_env =督促”在集结ARGS,这样就可以用于后续运行SET ENV命令 可以也可以使用env_file:选项在docker compose yml文件中,以便在部署堆栈的情况下

+0

我在我的问题中阐述了确定变量值的逻辑是在容器内运行的。因此,您的提议意味着我需要更改conainer内的dockerfile?我不认为这是可能的... – eshalev

+0

上述方法是可能的,我已经使用它,如果你没有任何逻辑来设置env变量,另一个方法,如果你有一个逻辑正在'CMD'执行脚本所以每次启动容器时,脚本都会被执行,并且env会根据逻辑进行设置,例如运行一个tomcat应用程序使脚本像'#!/ bin/ash或者打开你的逻辑脚本&&/path/of/tomcat/catalina。 sh把这个脚本放在CMD中 – Vignajeth