Встречается на собеседованиях • сегодня

Как сделать так, чтобы сервер запускался после запуска БД в Docker Compose

В Docker Compose можно использовать depends_on для указания зависимостей между сервисами, но это не гарантирует готовность БД. Для проверки доступности БД лучше использовать healthcheck и скрипт ожидания.

Пример docker-compose.yml:

yaml
services:
  db:
    image: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

app:
build: .
depends_on:
db:
condition: service_healthy
command: ["./wait-for-db.sh", "db:5432", "--", "java", "-jar", "app.jar"]

text

Пример `wait-for-db.sh` (основан на `wait-for-it`):
```bash
#!/bin/sh
host=$1
shift
until nc -z $host; do
  echo "Waiting for $host..."
  sleep 1
done
exec "$@"

Ключевые моменты:

  1. depends_on с condition: service_healthy ждет успешного healthcheck
  2. Скрипт ожидания проверяет доступность порта БД
  3. Healthcheck БД проверяет ее готовность принимать соединения
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы