Sobes.tech
Junior — Middle

Hogyan biztosítható késleltetés a Docker Compose-ban a szolgáltatás indításakor, hogy ne fogadjon bejövő kéréseket, amíg teljesen felkészül a működésre?

sobes.tech MI

Válasz az MI-től

Annak érdekében, hogy a Docker Compose-ban futó szolgáltatás ne fogadjon kéréseket, amíg teljesen nem kész, általában a "healthcheck" mechanizmust és várakozó szkripteket használunk.

Fő megközelítések:

  1. Healthcheck a docker-compose.yml-ben — meghatároz egy parancsot, amely ellenőrzi a szolgáltatás készültségét (pl. API kérés vagy port ellenőrzése). Más szolgáltatások a státuszától függhetnek.

  2. Várakozó szkript (wait-for-it, dockerize vagy saját) — a szolgáltatás entrypointjába hozzáadunk egy szkriptet, amely várja a szükséges erőforrás (pl. adatbázis) elérhetőségét, mielőtt elindítaná a fő folyamatot.

Példa healthcheck a docker-compose.yml-ben:

services:
  app:
    image: myapp
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 10s
      timeout: 5s
      retries: 5

Vagy várakozó szkript használata Dockerfile-ban:

ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./start-app.sh"]

Így a szolgáltatás csak akkor kezd el fogadni kéréseket, amikor készen áll.