【发布时间】:2020-12-27 03:15:05
【问题描述】:
我有一个名为 myenvfile.env 的 env 文件,它希望从系统环境变量中定义。
.env
SYSTEM_ENV_VAR=prefix
myenvfile.env
MY_COMPOSED_ENV_VAR=${SYSTEM_ENV_VAR}_suffix
docker-compose.yml
version: '3.4'
services:
myservice:
env_file:
- env_files/myenvfile.env
但是当我使用docker-compose up -d 创建容器时,我会查看容器环境变量和MY_COMPOSED_ENV_VAR = "${SYSTEM_ENV_VAR}_suffix" 而不是所需的"prefix_suffix"。
我怎样才能做到这一点?谢谢
编辑:更多信息
如果我在 Jenkins 作业中定义 SYSTEM_ENV_VAR,例如,它适用于 Linux 和 Windows。但是,如果我尝试在 shell 中执行此操作,则它在 Windows 中不起作用。
【问题讨论】:
-
.env 也是文件吗?它是如何使用的?
-
@GintsGints,我已经发布了
.env的内容。如果您有任何想法,请告诉我。 -
这是一个非常以 Windows 为中心的问题。 Linux 甚至没有单独的“用户”和“系统”环境变量的概念(它们是严格的每个进程的属性,仅此而已)。
-
我没有区分“用户”和“系统”环境变量,而是“系统”(我可以在 shell 中访问)和“内部 docker”变量。例如,我想参数化一个 IP 地址,并且我想定义不同的 docker,每个 docker 都组成它的变量,例如
MYVAR=${IP_ADDR}:${MYPORT}/anystring/。我在 docker 中需要 MYVAR(这就是我在 myenvfile.env 中定义它的原因)并且我的系统中有 IP_ADDR。 -
当您说“在我的系统中”时——哪个特定进程?特别是,它是否设置在启动
docker-compose命令的进程中?
标签: docker docker-compose environment-variables