Ошибка Ключи карты должны быть уникальными при использовании поля расширения YAML в docker compose для приложения django

hi У меня есть это в моем YAML файле, и я получаю ошибку Map keys must be unique в <<: *common в django service.

version: '3.4'

x-common: &common
  restart: unless-stopped
  networks: docker_django

x-django-build: &django-build
  build:
    context: .
    dockerfile: ./DockerFile.dev

services:

  django:
    <<: *django-build
    <<: *common
    container_name: docker_django_dc01
    command: bash -c "python manage.py runserver 0.0.0.0:8000"
    ports:
      - 8000:8000
    volumes:
      - ./:/code
    depends_on:
      - postgres

<<: *reference на самом деле не является ключевым словом; это обычная запись отображения YAML с ключом <<, которая, как оказалось, имеет специальное обращение. О SO см. Что такое синтаксис << (двойная стрелка влево) в YAML и где он специфицирован? ; который, в свою очередь, ссылается на проект спецификации Merge Key Language-Independent Type for YAML™ Version 1.1.

Поскольку << является ключом отображения, парсерам YAML, которые пытаются преобразовать отображения в словари, не понравится видеть его множество. Напротив, спецификация допускает последовательность в качестве значения, поэтому для данного конкретного использования вы можете написать

<<: [*django-build, *common]

(Также подумайте, нужно ли вам такое количество пользовательских настроек. Compose предоставляет сеть с именем default для вас, так что вам обычно не нужно networks:; если вы просто назовете свой Dockerfile, ну, Dockerfile тогда вы можете использовать однострочный build: . Это позволит избежать необходимости использования синтаксиса YAML alias/anchor здесь.)

Вернуться на верх