РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗dcPyPgWt 22 of 22 menu
◀

Ожидание базы в Docker

Ожидание базы пускает приложение только после того, как сервер ответил на проверку. Порядок старта готовности не ждёт, а условие здоровья ждёт. Тогда Python поднимается, когда pg_isready уже проходит внутри db.

Сервис db на postgres:18 с базой db и пользователем app получает проверку с паузой 5 секунд:

services: db: image: postgres:18 environment: POSTGRES_PASSWORD: demo POSTGRES_DB: db POSTGRES_USER: app healthcheck: test: ["CMD-SHELL", "pg_isready -U app"] interval: 5s timeout: 5s retries: 10 app: build: . ports: - "8080:8000" environment: DB_HOST: db DB_PORT: "5432" DB_NAME: db DB_USER: app DB_PASSWORD: demo depends_on: db: condition: service_healthy

Команда pg_isready с флагом -U и именем app спрашивает, принимает ли сервер соединения. Сервис app собирается из того же скрипта с psycopg, что и в уроке про запрос: база db, таблица notes, ответ hello на порту 8080.

Пока статус db не здоров, app не считается запущенным по правилу зависимости. Пересборка, подъём и таблица notes:

docker compose up -d --build docker compose exec db psql -U app -d db -c "CREATE TABLE IF NOT EXISTS notes (id SERIAL PRIMARY KEY, body TEXT); INSERT INTO notes (body) VALUES ('hello');"

В списке сервисов app появляется после успешной проверки db. Страница localhost:8080 отдаёт hello без повторных обновлений из-за неготовой базы. Выполним просмотр списка сервисов:

docker compose ps

Добавьте проверку готовности сервису store с паузой в 3 секунды и свяжите сервис note с условием здоровья store.

Поднимите проект в фоне и отметьте в списке сервисов, что note стартует после успешной проверки store.

←
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить