⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Contrôler l'ordre de démarrage et d'arrêt dans Compose

Vous pouvez contrôler l'ordre de démarrage et d'arrêt des services avec l'attribut depends_on. Compose démarre et arrête toujours les conteneurs dans l'ordre des dépendances, où les dépendances sont déterminées par depends_on, links, volumes_from, et network_mode: "service:...".

Un bon exemple de quand vous pourriez utiliser ceci est une application qui a besoin d'accéder à une base de données. Si les deux services sont démarrés avec docker compose up, il y a une chance que cela échoue car le service d'application pourrait démarrer avant le service de base de données et ne trouvera pas de base de données capable de gérer ses instructions SQL.

Contrôler le démarrage

Au démarrage, Compose n'attend pas qu'un conteneur soit "prêt", seulement qu'il soit en cours d'exécution. Cela peut causer des problèmes si, par exemple, vous avez un système de base de données relationnelle qui doit démarrer ses propres services avant de pouvoir gérer les connexions entrantes.

La solution pour détecter l'état prêt d'un service est d'utiliser l'attribut condition avec l'une des options suivantes :

  • service_started
  • service_healthy. Ceci spécifie qu'une dépendance est attendue pour être "saine", ce qui est défini avec healthcheck, avant de démarrer un service dépendant.
  • service_completed_successfully. Ceci spécifie qu'une dépendance est attendue pour s'exécuter jusqu'à la complétion réussie avant de démarrer un service dépendant.

Exemple

services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
        restart: true
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      retries: 5
      start_period: 30s
      timeout: 10s

Compose crée les services dans l'ordre des dépendances. db et redis sont créés avant web.

Compose attend que les vérifications de santé passent sur les dépendances marquées avec service_healthy. db est attendu pour être "sain" (comme indiqué par healthcheck) avant que web ne soit créé.

restart: true assure que si db est mis à jour ou redémarré en raison d'une opération Compose explicite, par exemple docker compose restart, le service web est également redémarré automatiquement, assurant qu'il rétablit correctement les connexions ou les dépendances.

La vérification de santé pour le service db utilise la commande pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} pour vérifier si la base de données PostgreSQL est prête. Le service est réessayé toutes les 10 secondes, jusqu'à 5 fois.

Compose supprime également les services dans l'ordre des dépendances. web est supprimé avant db et redis.

Informations de référence