Comment assurer un retard au démarrage du service dans Docker Compose afin qu'il n'accepte pas de requêtes entrantes jusqu'à ce qu'il soit entièrement prêt à fonctionner?
sobes.tech IA
Réponse de l'IA
Pour qu’un service dans Docker Compose ne reçoive pas de requêtes avant d’être complètement prêt, on utilise généralement le mécanisme de "healthcheck" et un délai de démarrage avec des scripts d’attente.
Approches principales:
-
Healthcheck dans docker-compose.yml — vous définissez une commande qui vérifie la disponibilité du service (par exemple, une requête à l’API ou une vérification du port). D’autres services peuvent dépendre de l’état de santé.
-
Script d’attente (wait-for-it, dockerize, ou personnalisé) — dans l’entrypoint du service, on ajoute un script qui attend que la ressource nécessaire (par exemple, la base de données) soit accessible avant de lancer le processus principal.
Exemple de healthcheck dans docker-compose.yml:
services:
app:
image: myapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 5
Ou utiliser un script d’attente dans Dockerfile:
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./start-app.sh"]
Ainsi, le service ne commencera pas à accepter les requêtes tant qu’il n’est pas prêt.