Ako zabezpečiť oneskorenie pri štarte služby v Docker Compose, aby neprijímala prichádzajúce požiadavky, kým sa úplne nepripraví na prácu?
sobes.tech AI
Odpoveď od AI
Aby služba v Docker Compose ne prijímala požiadavky, kým nie je úplne pripravená, zvyčajne sa používa mechanizmus "healthcheck" a oneskorenie štartu pomocou skriptov na čakanie.
Hlavné prístupy:
-
Healthcheck v docker-compose.yml — definujete príkaz, ktorý kontroluje pripravenosť služby (napríklad požiadavka na API alebo kontrola portu). Iné služby môžu závisieť od stavu zdravia.
-
Skript na čakanie (wait-for-it, dockerize alebo vlastný) — do entrypointu služby sa pridá skript, ktorý čaká na dostupnosť potrebného zdroja (napríklad databázy) pred spustením hlavného procesu.
Príklad healthcheck v docker-compose.yml:
services:
app:
image: myapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 5
Alebo použitie skriptu na čakanie v Dockerfile:
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./start-app.sh"]
Týmto spôsobom služba nezačne prijímať požiadavky, kým nebude pripravená.