Docker Compose env文件优先级高于未定义的shell过程变量
当我在Docker Compose env文件优先级高于未定义的shell过程变量,docker,docker-compose,Docker,Docker Compose,当我在docker compose.yml中使用environment键(不给它们赋值)并使用env_file键定义相同的环境变量时,第一个变量优先,即使它没有在shell中定义 我正在使用docker compose版本1.23.1,构建b02f1306 在报告中说: 在多个文件中设置相同的环境变量时,以下是Compose用于选择要使用的值的优先级: 撰写文件 Shell环境变量 环境文件 Dockerfile 未定义变量 我假设如果在shell中没有定义变量(第5点),那么它就没有优先于在环
docker compose.yml
中使用environment
键(不给它们赋值)并使用env_file
键定义相同的环境变量时,第一个变量优先,即使它没有在shell中定义
我正在使用docker compose版本1.23.1,构建b02f1306
在报告中说:
在多个文件中设置相同的环境变量时,以下是Compose用于选择要使用的值的优先级:
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
env_file: "db-variables.env"
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
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
$ 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
我希望shell传递的环境变量environment
只有在shell中真正定义时才优先于env_file
变量
我是否误解了文档?是否有解决办法?如文件中所述: 运行容器时,在撰写文件中定义的环境变量优先 定义要查看的变量,因为我认为值未设置为变量 docker compose.yml
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
env_file: "db-variables.env"
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
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
$ 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
如文件所述: 运行容器时,在撰写文件中定义的环境变量优先 定义要查看的变量,因为我认为值未设置为变量 docker compose.yml
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
env_file: "db-variables.env"
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
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
$ 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
在有关环境变量的文档的另一部分中,我发现: 在Environment部分中声明的环境变量将覆盖这些值,即使这些值为空或未定义,该值仍然有效
RTFM到我自己。在文档的另一部分中,我找到了环境变量: 在Environment部分中声明的环境变量将覆盖这些值,即使这些值为空或未定义,该值仍然有效
RTFM给我自己。我知道如果你给它们赋值,优先权会被赋予那些在组合中定义的值,我的问题是如何做到这一点,如果你没有在组合中赋值,优先权会被赋予在环境文件中定义的值。我知道如果你给它们赋值,优先权会被赋予那些在组合中定义的值,我的问题是如何做到这一点,如果不在compose中赋值,则取env_文件中定义的值。