Есть пара вариантов.Если вы используете docker-compose
, а не docker stack deploy
, вы можете использовать файл .env
для установки переменных.В режиме docker-compose или swarm вы можете установить переменную окружения в своей оболочке (часто это сценарий оболочки, используемый для развертывания приложения).Внутри yaml вы должны использовать переменную окружения, например:
service1:
environment:
- PROP
service2:
environment:
- PROP
service2:
environment:
- PROP
или явно использовать переменную, например:
service1:
environment:
- PROP=${PROP}
service2:
environment:
- PROP=${PROP}
service3:
environment:
- PROP=${PROP}
Если у вас есть файл .env
и вы хотите сделатьdocker stack deploy
, вы можете написать сценарий обработки этого с помощью одного из:
# option 1, leaves vars set in shell
set -a && . .env && set +a && docker stack deploy -c compose.yml stack_name
# option 2, only sets vars for single command
env $(cat .env | xargs) docker stack deploy -c compose.yml stack_name
В каждом из вышеперечисленных символов .env
- это просто переменные, которые вы могли бы установить в своей оболочке:
PROP=some_common_value
Следующая опция - использовать синтаксис Yaml для якорей и псевдонимов.Это копирует из одного раздела файла Yaml в другой (для поддержки слияния в service3 я переключился на ключ / значение вместо синтаксиса массива):
service1:
environment: &common_env
PROP: "some_common_value"
service2:
environment: *common_env
service3:
environment:
<<: *common_env
PROP3: "unique value"
Чтобы каждая служба имела уникальныйзначения, Docker добавил поля расширения в последних версиях составного синтаксиса.Это позволяет вам определять привязку отдельно от любого определения службы и объединять ее с каждой службой, каждый со своими уникальными значениями, например:
version: '3.4'
x-common-env: &common_env
PROP: "some_common_value"
services:
service1:
environment:
<<: *common_env
PROP1: "unique value 1"
service2:
environment:
<<: *common_env
PROP2: "unique value 2"
service3:
environment:
<<: *common_env
PROP3: "unique value 3"