Ввод переменной среды в контейнеры docker с помощью docker-compose

#docker #docker-compose

Вопрос:

Есть ли способ ввести переменные среды во все мои службы, созданные с помощью docker, без явного объявления их в конфигурации каждой службы?

Комментарии:

1. нет, вы должны сообщить службе об этом тем или иным способом. Может ли это быть env_file или среда

Ответ №1:

1)использование директивы env_file

вы можете использовать env_file директиву в своем docker-compose.yml файле

Вы можете передать несколько переменных среды из внешнего файла в контейнеры службы с помощью параметра «env_file», как и в случае docker run --env-file=FILE ... :

вам нужно будет объявить файл env для каждой службы, которая будет его использовать, и это все.

пример :

файл docker-compose.yml :

 version: "3"
services:
  database:
    image: "ubuntu"
    tty: true
    env_file:
     - same-variables.env
  web:
    image: "ubuntu"
    tty: true
    env_file:
     - same-variables.env
 

файл same-variables.env

  IS_DOCKER_COMPOSE=yes
 

затем, если вы откроете терминал :

 docker exec -it <docker_container> "echo $IS_DOCKER_COMPOSE"
 

результатом будет :

 yes
 

2)использование файла .env в корневом каталоге проекта

Согласно документу: https://docs.docker.com/compose/environment-variables/#the-env-file

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

Создайте файл .env в качестве корневого файла вашего проекта, как показано ниже.

пример :

ваше .env досье :

 TAG=v1.5
 

ваше docker-compose.yml досье :

 version: '3'
services:
  web:
    image: "webapp:$TAG"
 

организация вашего проекта должна быть :

 root_folder
|-.env
|-docker-compose.yaml
 

с файлом .env со всеми вашими переменными
файл env будет работать для всех них одновременно

Комментарии:

1. Но это все равно требует, чтобы я добавлял каждую переменную env в каждую службу, в которой я хочу, чтобы она была доступна, нет?

2. Я добавил новый ответ, вам придется объявлять файл env_file каждый раз, когда у вас есть служба, но вы можете использовать только один файл env для всех служб, и это все. (внутри одной и той же переменной.env добавьте все ваши переменные env)

3. Да, спасибо, но это именно то, чего я хотел избежать, я в основном хочу ввести переменную env для всех служб, которая указывает, что они работают в docker compose, но я не хочу, чтобы мне требовалось добавлять ее для каждой добавляемой мной службы (причина в том, что я буду не единственным, кто добавляет службы..)

4. будет ли использование env_file добавлять все переменные в .env файле в контейнер, или мне придется явно добавлять environment раздел в каждую службу?

5. да, это сработает, я добавляю пример в ответ.