Ожидание базы в Docker
Ожидание базы пускает приложение
только после того,
как сервер ответил
на проверку,
а не сразу после старта
процесса.
Простой порядок старта
готовности не ждёт,
а условие здоровья ждёт.
Тогда Node поднимается,
когда ping уже проходит
внутри db.
Сервис db
на mongo:8.3
без пароля получает
проверку с паузой
5 секунд:
services:
db:
image: mongo:8.3
healthcheck:
test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"]
interval: 5s
web:
build: .
ports:
- "3000:3000"
depends_on:
db:
condition: service_healthy
Команда внутри проверки
спрашивает локальный сервер
через mongosh
с флагом --quiet.
Сервис web
собирается из того же
скрипта с MongoClient,
что и в уроке
про подключение:
база app,
коллекция notes,
ответ hello
на порту 3000.
Пока статус db
не здоров,
web
не считается запущенным
по правилу зависимости.
Пересборка и фоновый
подъём:
docker compose up -d --build
В списке сервисов
web
появляется после
успешной проверки db.
Страница localhost:3000
отдаёт hello
без повторных обновлений
из-за неготовой базы.
Добавьте проверку готовности сервису db с паузой 5 секунд и свяжите сервис gate с условием здоровья db.
Поднимите проект в фоне и отметьте в списке сервисов, что gate стартует после успешной проверки db.