Как я могу передать переменные, которые я поместил в файл .env, в контейнеры моего роя докеров? - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь использовать одинаковые docker-compose.yml и .env для обоих docker-compose и swarm (они анализируются (sed) в конфигурационный файл с помощью скрипта run.sh). Переменные работают нормально из команды docker-compose up, но они не передаются, когда я использую команду docker stack deploy.

Как передать переменные в контейнер, чтобы запустить . sh скрипт будет их разбирать?

Ответы [ 3 ]

1 голос
/ 02 ноября 2019

Загрузка файла .env - это функция docker-compose, которая не является частью интерфейса командной строки Docker. Вы можете вручную загрузить содержимое этого файла в вашу оболочку перед выполнением развертывания:

set -a; . ./.env; set +a
docker stack deploy -c docker-compose.yml stack_name

Другие опции включают использование docker-compose для предварительной обработки файла compose:

docker-compose config >docker-compose.processed.yml

ИлиВы можете использовать envsubst для замены переменных, чтобы создать файл компоновки с уже раскрытыми переменными:

set -a; . ./.env; set +a
envsubst <docker-compose.yml >docker-compose.processed.yml
0 голосов
/ 09 ноября 2019

Чтобы передать переменные среды оболочки в контейнеры, используйте синтаксис env_file:

web:
  env_file:
    - web-variables.env

Как документы состояние:

Вы можете передать несколько средПеременные из внешнего файла в контейнеры службы с параметром 'env_file'

Однако использование .env в качестве внешнего имени файла может привести к непредвиденным результатам и семантически проблематично.

Размещение.env в папке, где команда docker-compose служит для разных целей:

As Документы , Документы2 , Документы3 Состояние:

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

Вы можете установить значения по умолчанию для переменных среды, используя файл .env, который Compose автоматически ищет

Так что если файл compose содержит:

db:
  image: "postgres:${POSTGRES_VERSION}"

You .env будет содержать:

POSTGRES_VERSION=4.0

Эта функция действительно работает только в compose:

Файл .env featuОн работает только при использовании команды docker-compose up и не работает с развертыванием стека докеров

0 голосов
/ 05 ноября 2019

На самом деле я нашел лучший / самый простой способ - просто добавить этот аргумент в файл docker-compose.yml:

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