当我使用docker-compose.yml
键(不给它们提供值)并使用environment
键在env_file
中定义相同的环境变量时,即使不是在外壳中定义。
我正在使用docker-compose版本1.23.1,构建b02f1306
在documentation中说:
在多个文件中设置相同的环境变量时,以下是Compose用于选择要使用的值的优先级:
- 撰写文件
- Shell环境变量
- 环境文件
- Dockerfile
- 未定义变量
我假设,如果在外壳程序中未定义变量(第5点),则它没有环境文件中定义的变量优先。
docker-compose.yml
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
env_file: "db-variables.env"
db-variables.env
POSTGRES_USER=bob
POSTGRES_PASSWORD=password
结果:
$ docker-compose run --entrypoint printenv db
Creating network "compose-example_default" with the default driver
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=105881c75c8c
TERM=xterm
LANG=en_US.utf8
PG_MAJOR=11
PG_VERSION=11.1
PG_SHA256=90815e812874831e9a4bf6e1136bf73bc2c5a0464ef142e2dfea40cda206db08
PGDATA=/var/lib/postgresql/data
HOME=/root
我希望Shell传递环境变量environment
仅在env_file
变量中真正定义时才具有优先级。
我误解了文档吗?有什么解决方法吗?
答案 0 :(得分:1)
如文档中所述:
运行容器时,在Compose文件中定义的环境变量优先。
定义变量以查看,因为我认为未将值设置为变量。
docker-compose.yml
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
env_file: "db-variables.env"
db-variables.env
POSTGRES_USER=bob
POSTGRES_PASSWORD=password
结果:
$ docker-compose run --entrypoint printenv db
Creating network "compose-example_default" with the default driver
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8fcbf617bb6d
TERM=xterm
POSTGRES_USER=user
POSTGRES_PASSWORD=password
LANG=en_US.utf8
PG_MAJOR=11
PG_VERSION=11.3
PG_SHA256=2a85e082fc225944821dfd23990e32dfcd2284c19060864b0ad4ca537d30522d
PGDATA=/var/lib/postgresql/data
HOME=/root
答案 1 :(得分:0)