Невозможно использовать якоря и псевдонимы YAML для объединения элементов списка в один плоский список.Однако в docker-compose есть собственный процесс глубокого объединения файлов Compose, который вы можете комбинировать с якорями и псевдонимами YAML, чтобы получить нужный эффект.Для этого вам нужно разделить определения служб на два файла.Вот пример
foo.yml
Этот файл Compose имеет расширение с именем x-secrets
, которое объявляет секреты с именами one
и two
.У него есть якорь с именем secrets
, и он используется для заполнения общих секретов служб a
и b
.
version: "3.7"
x-secrets: &secrets
secrets:
- one
- two
services:
a:
<<: *secrets
image: a-image
b:
<<: *secrets
image: b-image
secrets:
one:
external: true
two:
external: true
bar.yml
ДалееФайл компоновки расширяет службу a
двумя дополнительными секретами с именами three
и four
.
version: "3.7"
services:
a:
secrets:
- three
- four
secrets:
three:
external: true
four:
external: true
Объединение файлов компоновки
Когда два файла на месте, скажите docker-составить, чтобы использовать их обоих для конфигурации проекта.Файлы будут объединены - для того, чтобы сформировать одну полную конфигурацию.Я использую команду config
, чтобы показать окончательную конфигурацию.
$ docker-compose -f foo.yml -f bar.yml config
secrets:
four:
external: true
name: four
one:
external: true
name: one
three:
external: true
name: three
two:
external: true
name: two
services:
a:
image: a-image
secrets:
- source: four
- source: one
- source: three
- source: two
b:
image: b-image
secrets:
- source: one
- source: two
version: '3.7'
Здесь вы можете видеть, что служба a
теперь имеет четыре секрета.Списки секретов из foo.yml
и bar.yml
были объединены вместе.
Кроме того, вы можете указать список файлов Compose, используя переменную среды с именем COMPOSE_FILE
, которую также можно поместить вфайл с именем .env
.