Ordre de démarrage

depends_on démarre la base avant l'API, mais démarré ne veut pas dire prêt : PostgreSQL a besoin de quelques secondes avant d'accepter des connexions. condition: service_healthy attend qu'elle les accepte vraiment.

Comment ça marche

Avec la forme courte depends_on: [db], Compose attend seulement que le conteneur db démarre. Avec la forme longue et condition: service_healthy, il attend que le healthcheck de db réussisse. L'application doit quand même réessayer sa connexion, car une base peut aussi redémarrer plus tard.

Ce qui casse

Une API qui se connecte une seule fois au démarrage plante avec ECONNREFUSED quand elle arrive avant la base, et une politique de redémarrage ne fait que le masquer. L'ordre ne s'applique qu'à docker compose up, pas aux redémarrages du serveur ni à un service qui redémarre seul.

Dans compose.yaml

services:
  api:
    build: ./api
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:16
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 2s
      retries: 10

Regarde-le casser, puis répare-le

Écris le Dockerfile ou le fichier compose, tape les commandes docker, et regarde un serveur simulé les exécuter à travers redémarrages, mises à jour et trafic. Gratuit pour commencer.