Наиболее вероятным решением было бы использование docker compose вместе со сторонним скриптом.
Например, ваш файл docker compose может выглядеть так:
services:
web:
build: .
ports:
- "80:8000"
depends_on:
- "db"
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
db:
image: postgres
Где ./wait-for-it.sh
- этосторонний скрипт, который вы можете получить из
https://github.com/vishnubob/wait-for-it
Вы также можете использовать этот скрипт из
https://github.com/Eficode/wait-for
Я быРекомендую настроить скрипт в соответствии с вашими потребностями, если вы хотите (я сделал это).
PS:
Проблема ожидания готовности базы данных (например), действительно простоподмножество гораздо более крупной проблемы распределенных систем.На производстве ваша база данных может стать недоступной или перенести хосты в любое время.Ваше приложение должно быть устойчивым к таким типам сбоев.
Чтобы справиться с этим, спроектируйте свое приложение, чтобы попытаться восстановить соединение с базой данных после сбоя.Если приложение повторяет соединение, оно может в конечном итоге соединиться с базой данных.
Лучшее решение - выполнить эту проверку в коде приложения как при запуске, так и в случае потери соединения по любой причине