![](/img/trans.png)
[英]Why does variables substitution not work when using multiple env_files in docker-compose.yml?
[英]Use system environment variables in env_files in docker-compose.yml
我有一个名为 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 中不起作用。
尝试在SYSTEM_ENV_VAR
docker-compose up
命令之前声明SYSTEM_ENV_VAR
,例如:
$ export SYSTEM_ENV_VAR=test
$ docker-compose up
您会看到它会正确展开。
发生这种情况是因为SYSTEM_ENV_VAR
应该在SYSTEM_ENV_VAR
docker-compose up
命令之前声明,因为它不会使用在容器创建瞬间(例如env_file
键部分)中声明的环境变量进行扩展,只有那些当docker-compose
运行时已经可用。
这就是 Jenkins 工作在这种情况下起作用的原因。
.env 文件仅在 docker compose 开始时使用,方法是将 $VARIABLE 替换为 .env 文件中给出的值。 所以你不能指望它更新你的 myenvfile.env 文件的内容。 (检查这个)
相反,您应该在 docker-compose.yaml 中声明新的环境变量,例如:
environment:
- MY_COMPOSED_ENV_VAR=${SYSTEM_ENV_VAR}_suffix
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.