Поддерживает ли Docker Compose конфигурационные файлы в формате JSON?

Ответ

Да, Docker Compose поддерживает JSON-файлы конфигурации, но это не основной и не рекомендуемый формат. Стандартным и предпочтительным форматом является YAML (docker-compose.yml).

Как использовать JSON-файл: Для использования JSON-файла необходимо явно указать его с помощью флага -f (или --file).

  1. Пример файла docker-compose.json:
    {
      "version": "3.8",
      "services": {
        "web": {
          "image": "nginx:alpine",
          "ports": ["8080:80"],
          "restart": "unless-stopped"
        },
        "db": {
          "image": "postgres:13",
          "environment": ["POSTGRES_PASSWORD=secret"],
          "volumes": ["db_data:/var/lib/postgresql/data"]
        }
      },
      "volumes": {
        "db_data": {}
      }
    }
  2. Запуск с JSON-файлом:
    docker compose -f docker-compose.json up
    # Или для старой версии CLI:
    # docker-compose -f docker-compose.json up
Сравнение JSON и YAML для Docker Compose: Критерий YAML (.yml) JSON (.json)
Читаемость Высокая, менее загромождённый синтаксис Низкая, много кавычек и скобок
Комментарии Поддерживаются (# комментарий) Не поддерживаются
Многострочные строки Удобный синтаксис (|, >) Сложный, требует экранирования
Стандарт Основной и рекомендуемый Альтернативный, для специфических случаев

Вывод: Используйте JSON только если ваша конфигурация генерируется автоматически другим инструментом. Для ручного написания и поддержки всегда выбирайте YAML из-за его читаемости и возможности добавлять комментарии.

Ответ 18+ 🔞

А, ну это же про Docker Compose и его файлы конфигурации! Слушай, тут история простая, но с подвохом, как всегда.

Да, Docker Compose понимает JSON-файлы, это факт. Но если ты будешь их использовать постоянно, то это, ёпта, всё равно что на работу в тапочках ходить — технически можно, но выглядит как полный распиздяй. Каноничный, правильный и человеческий формат — это YAML (docker-compose.yml). На нём вся вселенная и заточена.

Как заставить эту штуку жрать JSON? Всё просто — надо тыкнуть ей мордой в файл, явно указав его через флаг -f.

  1. Вот смотри, как выглядит этот docker-compose.json в дикой природе:

    {
      "version": "3.8",
      "services": {
        "web": {
          "image": "nginx:alpine",
          "ports": ["8080:80"],
          "restart": "unless-stopped"
        },
        "db": {
          "image": "postgres:13",
          "environment": ["POSTGRES_PASSWORD=secret"],
          "volumes": ["db_data:/var/lib/postgresql/data"]
        }
      },
      "volumes": {
        "db_data": {}
      }
    }

    Выглядит, конечно, блядовито — одни кавычки да скобочки. Читать это — то ещё удовольствие.

  2. А вот как его запустить, чтобы не накрылся медным тазом:

    docker compose -f docker-compose.json up
    # Или если у тебя старьё, то так:
    # docker-compose -f docker-compose.json up
Давай на пальцах, в чём разница между JSON и YAML: Критерий YAML (.yml) JSON (.json)
Читаемость Нормальная, для людей. Не надо глаза ломать. Низкая, блядь. Сплошные {, " и ,. Удивление пиздец, как в этом что-то понимать.
Комментарии Есть! Можно писать # вот тут я накосячил. Нету нихуя. Сиди и гадай, что эта строка делает.
Многострочный текст Легко и понятно. Готовься к экранированиям и костылям, ебать копать.
Что использовать Основной путь, рекомендованный всеми. Так, на крайняк, если другой скрипт эту хрень сгенерировал.

Итог, чувак: JSON — это как аварийный выход. Используй его только если твоя конфигурация рождается в недрах какого-нибудь автоматического генератора, у которого, видимо, доверия ебать ноль. Для всего, что пишешь и поддерживаешь ты сам — бери YAML. Он читаемый, с комментариями, и твои же глаза потом спасибо скажут. Не усложняй себе жизнь, ядрёна вошь.