docker -создать не читающие переменные среды - PullRequest
0 голосов
/ 04 апреля 2020

При попытке использовать 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 comppose. Однако если я экспортирую некоторую переменную, эта переменная, экспортируемая в оболочку, не будет использоваться по умолчанию, определенному в файле 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

, но без игры в кости.

Поскольку этот блок на самом деле является экземпляром wsl, работающим на windows 10 с использованием сервера localhost docker, я подумал, что это может быть некоторой ошибкой, но воссоздав эти шаги в windows powershell на той же машине дает те же результаты, что и при сборке на обычном сервере fedora-server

Я неправильно устанавливаю переменную среды? Кажется, я помню, как делал это до где-то , и оно работало, есть какая-то ошибка в этой docker -композитной версии или в моей конфигурации?

1 Ответ

1 голос
/ 10 апреля 2020

Похоже, что Docker интерпретирует значение после знака равенства как литерал.

Извлечение https://docs.docker.com/compose/compose-file/#variable -замена . В нем упоминается использование файла env для установки значений по умолчанию или выполнение их встроенными. Он также использует знак доллара и фигурные скобки для переменной.

Например: - MY_VAR = $ {MY_ENV_VAR: my_var_default_value}

Во всех моих случаях я либо ставлю замену с префиксом '$' , В некоторых я также окружаю его скобками.

FERRO_LOG_LEVEL = $ {FERRO_LOG_LEVEL: 1}
FERRO_SECRET = $ {FERRO_SECRET}

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