Hoe zorg je voor een vertraging bij het starten van de service in Docker Compose, zodat deze geen inkomende verzoeken accepteert totdat hij volledig klaar is voor gebruik?
sobes.tech AI
Antwoord van AI
Om een service in Docker Compose geen verzoeken te laten accepteren voordat deze volledig klaar is, wordt meestal het "healthcheck"-mechanisme en een opstartvertraging met wacht-scripts gebruikt.
Belangrijkste benaderingen:
-
Healthcheck in docker-compose.yml — definieer een commando dat de gereedheid van de service controleert (bijvoorbeeld een API-aanvraag of poortcontrole). Andere services kunnen afhankelijk zijn van de gezondheidsstatus.
-
Wacht-script (wait-for-it, dockerize, of eigen) — voeg in de entrypoint van de service een script toe dat wacht tot de benodigde resource (bijvoorbeeld de database) beschikbaar is voordat het hoofdproces wordt gestart.
Voorbeeld van healthcheck in docker-compose.yml:
services:
app:
image: myapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 5
Of gebruik een wacht-script in Dockerfile:
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./start-app.sh"]
Op deze manier begint de service pas verzoeken te accepteren als deze klaar is.