尝试使用docker-compose时,似乎无法读取来自主机系统的导出环境变量。
在撰写本文时,完整的相关代码可在 这里 找到。
当调用
我使用的命令序列如下:
在撰写本文时,完整的相关代码可在 这里 找到。
$ 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文件时的预期。然而,如果我导出某些变量,那么导出到shell的变量不会覆盖docker-compose文件中定义的默认值。这适用于像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
但是没有结果。
由于此框实际上是在 Windows 10 上运行的 WSL 实例,使用本地主机 Docker 服务器,我认为可能有一些 bug,但是在同一台计算机上的 Windows PowerShell 中重新创建这些步骤会产生相同的结果,而在常规 Fedora 服务器框中构建也是如此。
我是否设置环境变量错误?我似乎记得在某个地方这样做并且它可以工作,这个 docker-compose 版本或我的配置是否存在某些 bug?
=
后解释变量的方式是按预期工作的,这就是它们被分配默认值的方式。实际上应该发生的是我导出变量名本身。如果您注意到我的问题,我导出FERRO_LOG和FERRO_SECRET,没有任何=
之后的内容。我已经阅读了有关变量替换和使用.env文件的信息,但这不是我想要的用例,因为我希望直接从环境中提取它。 - gastrodon