docker-compose不读取环境变量

时间:2020-04-04 03:48:12

标签: linux docker docker-compose environment-variables dockerfile

尝试使用docker-compose时,似乎没有从主机系统读取导出的环境变量。

在撰写本文时,有问题的完整代码可以here找到。

$ docker info

Client: Docker Engine - Community
Version:           19.03.6
API version:       1.40
Go version:        go1.12.16
Git commit:        369ce74a3c
Built:             Thu Feb 13 01:27:58 2020
OS/Arch:           linux/amd64
Experimental:      false
Server: Docker Engine - Community
Engine:
Version:          19.03.8
API version:      1.40 (minimum version 1.12)
Go version:       go1.12.17
Git commit:       afacb8b
Built:            Wed Mar 11 01:29:16 2020
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          v1.2.13
GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version:          1.0.0-rc10
GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version:          0.18.0
GitCommit:        fec3683

$ docker-compose info

docker-compose version 1.21.0, build unknown
docker-py version: 3.4.1  
CPython version: 3.7.3    
OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019 

特别是,我对文件docker-compose.yml及其部分environment

感兴趣
version: "3"
...
environment:
    - FERRO_MONGO_HOST=ferro-mongo
    - FERRO_MONGO_USER=ferrothorn
    - FERRO_MONGO_PASS=ferrothorn-local
    - FERRO_MONGO_BASE=ferrothorn
    - FERRO_LOG_LEVEL=1
    - FERRO_SECRET

调用docker-compose up时,环境变量的设置方式与我期望它们查看docker-compose文件的方式相同。但是,如果我导出一些变量,则不会在docker-compose文件中定义的默认值上使用导出到shell的变量。对于FERRO_SECRET这样没有默认值的变量,而FERRO_LOG_LEVEL却设置了默认值的变量就是这种情况。

我正在使用的命令序列如下

export FERRO_SECRET=very_secret_pw
export FERRO_LOG_LEVEL=2
docker-compose up --build # tried with and without --build flag

它只是...不起作用?我也尝试过使用网上看到的这个技巧

FERRO_SECRET=very_secret_pw FERRO_LOG_LEVEL=2 docker-compose up --build

但没有骰子。

由于此框实际上是使用本地docker服务器在Windows 10上运行的wsl实例,因此我认为这可能是一些错误,但是在同一台计算机上的Windows powershell中重新创建这些步骤会产生相同的结果,常规的fedora服务器盒

我设置环境变量是否错误?我似乎记得在 somewhere 之前进行过此操作,并且该功能正常工作,此docker-compose版本或我的配置是否存在一些错误?

1 个答案:

答案 0 :(得分:2)

看起来Docker正在将等号后的值解释为文字。

签出https://docs.docker.com/compose/compose-file/#variable-substitution。 它提到使用env文件设置默认值或内联它们。 该变量还使用美元符号和大括号。

例如: -MY_VAR = $ {MY_ENV_VAR:my_var_default_value}

在我所有的情况下,我都用'$'作为替换的前缀。在某些情况下,我还用括号将其包围。

FERRO_LOG_LEVEL = $ {FERRO_LOG_LEVEL:1}
FERRO_SECRET = $ {FERRO_SECRET}

相关问题