#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. да, это сработает, я добавляю пример в ответ.