Значение амперсанда (&) в файле docker-compose.yml

Я недавно сталкивался с этим и задавался вопросом, что означает &django

version: '2'

services:
  django: &django

Я не вижу ничего в документах, связанных с этим.

Ответ 1

Это функция YAML, называемая якорями, которая не относится к Docker Compose. Я бы посоветовал вам посмотреть ниже URL для получения более подробной информации

https://learnxinyminutes.com/docs/yaml/

Следуйте разделу EXTRA YAML FEATURES

В YAML также есть удобная функция под названием "якоря", которая позволяет легко дублировать содержимое в документе. Оба эти ключа будут иметь одинаковое значение:

anchored_content: & anchor_name Эта строка будет отображаться как значение двух ключей. other_anchor: * anchor_name

Якоря могут использоваться для дублирования/наследования свойств

base: &base
    name: Everyone has same name

foo: &foo
    <<: *base
    age: 10

bar: &bar
    <<: *base
    age: 20

Ответ 2

В дополнение к ответу Таруна & идентифицирует привязку, а * - псевдоним, ссылающийся на привязку. Это описывается как следующее в спецификации YAML:

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

Примечание:

Для тех, кто хочет начать использовать якоря в файлах docker-compose, существует более мощный способ создания якорей многократного использования с помощью полей расширения YAML docker-compose.

version: "3.4"

# x-docker-data is an extension and when docker-compose
# parses the YAML, it will not do anything with it

x-docker-data: &docker-file-info
  build:
    context: .
    dockerfile: Dockerfile

services:
  some_service_a:
    <<: *docker-file-info
    restart: on-failure
    ports:
      - 8080:9090
  some_service_b:
    <<: *docker-file-info
    restart: on-failure
    ports:
      - 8080:9595