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

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

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

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

services: db: image: mysql:9.7 environment: MYSQL_ROOT_PASSWORD: demo MYSQL_DATABASE: app MYSQL_USER: app MYSQL_PASSWORD: demo healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s web: build: . ports: - "3000:3000" depends_on: db: condition: service_healthy

Команда внутри проверки спрашивает локальный сервер через mysqladmin ping с флагом -h localhost. Сервис web собирается из того же скрипта с mysql2, что и в уроке про запрос: база app, таблица notes, ответ hello на порту 3000.

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

docker compose up -d --build docker compose exec db mysql -uapp -pdemo app -e "CREATE TABLE IF NOT EXISTS notes (id INT PRIMARY KEY AUTO_INCREMENT, body VARCHAR(255)); INSERT INTO notes (body) VALUES ('hello');"

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

Добавьте проверку готовности сервису db с паузой 5 секунд и свяжите сервис gate с условием здоровья db.

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

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