Выбор ответа Junior Docker Compose спрашивают часто обновлено

depends_on и готовность базы

Вопрос

У сервиса api указано depends_on: [db]. При docker compose up API иногда падает с connection refused к базе. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Простой dependson гарантирует только порядок запуска, а не готовность базы. Контейнер базы запущен, но PostgreSQL ещё инициализируется.

Варианты ответа

  1. depends_on в Compose v2 игнорируется, порядок старта сервисов случайный, нужен v1
  2. Простой depends_on гарантирует только порядок запуска, а не готовность базыправильный ответ
  3. Сервисы видят друг друга по имени только после docker network connect вручную
  4. Порт базы не опубликован через ports:, поэтому API не может до неё достучаться

Разбор

Контейнер базы запущен, но PostgreSQL ещё инициализируется. Нужен healthcheck у db и depends_on: db: condition: service_healthy, а в приложении повторы подключения. Имена сервисов резолвятся во внутренней сети, публикация порта для этого не нужна, а depends_on в v2 работает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.