Когда я определяю ту же переменную среды в docker-compose.yml
с помощью клавиши environment
(не давая им значения), а также с помощью клавиши env_file
, первый имеет приоритет, даже если он не определен в оболочке.
Я использую docker-compose версии 1.23.1, сборка b02f1306
В документации говорится:
Когда вы устанавливаете одну и ту же переменную среды в нескольких файлах, вот приоритет, используемый Compose, чтобы выбрать, какое значение использовать:
- Создать файл
- Переменные среды оболочки
- Файл среды
- Dockerfile
- Переменная не определена
Я предполагаю, что если переменная не определена (точка 5) в оболочке, она не имеет приоритета над переменной, определенной в файле среды.
докер-compose.yml
version: '3'
services:
db:
image: "postgres:11-alpine"
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
env_file: "db-variables.env"
дб-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
Я ожидаю, что переменные среды прохода оболочки environment
имеют приоритет над env_file
переменными, только когда они действительно определены в оболочке.
Я неправильно понял документацию? Есть ли обходной путь?