Docker Составьте приоритет файла env над переменными прохода оболочки, когда они не определены - PullRequest
0 голосов
/ 13 июня 2019

Когда я определяю ту же переменную среды в docker-compose.yml с помощью клавиши environment (не давая им значения), а также с помощью клавиши env_file, первый имеет приоритет, даже если он не определен в оболочке.

Я использую docker-compose версии 1.23.1, сборка b02f1306

В документации говорится:

Когда вы устанавливаете одну и ту же переменную среды в нескольких файлах, вот приоритет, используемый Compose, чтобы выбрать, какое значение использовать:

  1. Создать файл
  2. Переменные среды оболочки
  3. Файл среды
  4. Dockerfile
  5. Переменная не определена

Я предполагаю, что если переменная не определена (точка 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 переменными, только когда они действительно определены в оболочке.

Я неправильно понял документацию? Есть ли обходной путь?

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Как указано в документе:

При запуске контейнера переменная среды, определенная в файле Compose, имеет приоритет.

Определите переменные для просмотра, так как я думаю, что значения не установлены для переменных.

докер-compose.yml

version: '3'
services:
  db:
    image: "postgres:11-alpine"
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=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=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
0 голосов
/ 16 июня 2019

В другом разделе документации по переменным среды я нашел this :

Переменные среды, объявленные в разделе среды, переопределяют эти значения. Это верно , даже если эти значения пусты или не определены .

RTFM для себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...