Выбор ответа Junior Docker Compose спрашивают часто обновлено
depends_on и готовность базы
Вопрос
У сервиса api указано depends_on: [db]. При docker compose up API иногда падает с connection refused к базе. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Простой dependson гарантирует только порядок запуска, а не готовность базы. Контейнер базы запущен, но PostgreSQL ещё инициализируется.
Варианты ответа
depends_onв Compose v2 игнорируется, порядок старта сервисов случайный, нужен v1- Простой
depends_onгарантирует только порядок запуска, а не готовность базыправильный ответ - Сервисы видят друг друга по имени только после
docker network connectвручную - Порт базы не опубликован через
ports:, поэтому API не может до неё достучаться
Разбор
Контейнер базы запущен, но PostgreSQL ещё инициализируется. Нужен healthcheck у db и depends_on: db: condition: service_healthy, а в приложении повторы подключения. Имена сервисов резолвятся во внутренней сети, публикация порта для этого не нужна, а depends_on в v2 работает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.