~/tools/docker-compose/service-graph

Docker Compose

Compose Dependency Graph

Построить текстовый граф зависимостей сервисов (depends_on).

Как это работает

Docker compose файл с десятком сервисов и цепочкой depends_on между ними держать в голове сложно, особенно если в проект недавно пришел новый разработчик и пытается понять, что от чего зависит и в каком порядке все это поднимается. Docker compose service graph online превращает секцию depends_on в понятный текстовый список связей между сервисами.

Инструмент проходит по каждому сервису из секции services и смотрит, есть ли у него depends_on, независимо от того, задан ли этот список простым массивом имен сервисов или расширенным объектом с условиями вроде service_healthy.

Результат показывает для каждого сервиса, от кого он зависит, либо явно помечает сервис как не имеющий зависимостей, что удобно и для быстрой документации архитектуры проекта, и для code review нового или измененного compose файла коллеги.

Частые вопросы

Учитывает ли граф условия depends_on вроде service_healthy или service_started?

Текущая версия показывает сам факт зависимости между сервисами, не углубляясь в конкретное условие ожидания, для полной картины условий стоит также заглянуть в сам yaml файл.

Что если сервис зависит сам от себя из-за опечатки в конфиге?

Инструмент честно покажет такую зависимость как есть в тексте, что само по себе будет сигналом проверить конфиг внимательнее, потому что зависимость сервиса от самого себя обычно ошибка.

Показывает ли граф порядок фактического запуска контейнеров?

Список зависимостей дает представление о порядке, в котором docker compose будет пытаться поднимать сервисы, но точное время готовности зависит еще и от healthcheck и типа условия depends_on.

Можно ли построить граф для файла с extends или include других compose файлов?

Инструмент анализирует только тот текст, который вы вставили в поле ввода, если реальная конфигурация собирается из нескольких файлов через include, для полной картины эти файлы стоит сначала объединить вручную или через инструмент docker compose merge.