Docker compose не запускает сервисы по порядку зависимостей как решить

Рейтинг: 49.1% · 18 голосов
Главные новости IT и технологий: релизы, тренды индустрии, гаджеты, искусственный интеллект и обсуждение событий мира high-tech.
Ответить
Аватара пользователя
oleg5897
Сообщения: 24
Зарегистрирован: Пн май 11, 2026 1:28 am

Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение oleg5897 »

Замучился с банальной проблемой: есть docker-compose с тремя сервисами — postgres, redis и app. В depends_on указал зависимости, но app стартует раньше чем postgres успевает принять соединения, и падает с ошибкой connection refused. Перезапускаю вручную — работает. Как сделать нормальное ожидание готовности?
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — miron_sql94
Вот рабочий пример конфига который я использую в продакшене уже год без проблем. Для postgres в healthcheck пишешь: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"], interval: 5s, timeout: 5s, retries: 5. В depends_on для app: postgres: condition: service_healthy. Для redis аналогично, только test: ["CMD", "redis-cli", "ping"]. Это решает 95% случаев с очерёдностью старта.
Перейти к ответу →
Аватара пользователя
pavel_sys
Сообщения: 10
Зарегистрирован: Пн май 11, 2026 10:12 pm

Re: Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение pavel_sys »

depends_on по умолчанию ждёт только запуска контейнера, не готовности сервиса внутри. Тебе нужен healthcheck. В секции postgres добавь healthcheck с командой pg_isready, а в depends_on для app укажи condition: service_healthy. Тогда app не стартует пока postgres не пройдёт healthcheck.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
miron_sql94
Сообщения: 3
Зарегистрирован: Пн май 11, 2026 9:16 pm

Re: Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение miron_sql94 »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Вот рабочий пример конфига который я использую в продакшене уже год без проблем. Для postgres в healthcheck пишешь: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"], interval: 5s, timeout: 5s, retries: 5. В depends_on для app: postgres: condition: service_healthy. Для redis аналогично, только test: ["CMD", "redis-cli", "ping"]. Это решает 95% случаев с очерёдностью старта.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
tanya_sigma31
Сообщения: 20
Зарегистрирован: Чт май 14, 2026 10:41 pm

Re: Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение tanya_sigma31 »

Помимо healthcheck советую добавить в само приложение логику retry при подключении к БД. Даже если postgres ответил на pg_isready, инициализация схемы и первые запросы могут занять время. В Python это asyncpg с retry через tenacity, в Go — стандартный backoff. Инфраструктурное решение + application-level retry = надёжность.
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
mark9640
Сообщения: 26
Зарегистрирован: Пн май 11, 2026 4:32 am

Re: Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение mark9640 »

А ещё есть утилита wait-for-it.sh — добавляешь её в образ и в command пишешь wait-for-it postgres:5432 -- python app.py. Старый способ, но до сих пор работает если по каким-то причинам не хочешь трогать compose-файл.
👍2 ❤️ 🔥1 😄3 🤔2
Аватара пользователя
kirill_net
Сообщения: 10
Зарегистрирован: Вт май 12, 2026 1:04 pm

Re: Docker compose не запускает сервисы по порядку зависимостей как решить

Сообщение kirill_net »

Классическая ловушка для новичков. Я когда-то потратил на это полдня. Сейчас всегда добавляю healthcheck в базовые compose-шаблоны сразу, ещё на этапе создания проекта.
👍1 ❤️ 🔥1 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость