web-dev-qa-db-fra.com

Quelle est l'alternative pour conditionner la forme de depend_on dans docker-compose Version 3?

docker-compose 2.1 offre la fonctionnalité Nice permettant de spécifier une condition avec depends_on. La documentation actuelle de docker-compose indique: 

La version 3 ne prend plus en charge la forme de condition de goes_on.

Malheureusement, la documentation n'explique pas pourquoi le formulaire condition a été supprimé et il n’existe aucune recommandation spécifique sur la façon de mettre en œuvre ce comportement à partir de la version 3.

18
m o

Il y a eu un abandon de la spécification des dépendances de conteneur dans Compose. Ils ne sont valides qu'au démarrage et ne fonctionnent pas lorsque les conteneurs dépendants sont redémarrés au moment de l'exécution. Au lieu de cela, chaque conteneur doit inclure un mécanisme permettant de réessayer de se reconnecter aux services dépendants lorsque la connexion est interrompue. De nombreuses bibliothèques pour se connecter aux bases de données ou aux services de l'API REST ont des tentatives intégrées configurables. Je regarderais ça. De toute façon, il est nécessaire pour le code de production.

5
Alkaline

Certains outils externes vous permettent d'imiter ce comportement. Par exemple, avec l'outil dockerize , vous pouvez encapsuler votre CMD ou ENTRYPOINT avec dockerize -wait et empêcher ainsi l'exécution de votre application tant que les services spécifiés ne seront pas prêts.

Si votre fichier docker-compos ressemblait à ceci:

version: '2.1'
services:
  kafka:
    image: spotify/kafka
    healthcheck:
      test: nc -z localhost 9092
  webapp:
     image: foo/bar # your image
     healthcheck:
       test: curl -f http://localhost:8080
  tests:
     image: bar/foo # your image
     command: YOUR_TEST_COMMAND
     depends_on:
       kafka:
         condition: service_healthy
       webapp:
         condition: service_healthy

alors vous pouvez utiliser dockerize dans votre fichier de composition v3 comme ceci:

version: '3.0'
services:
  kafka:
    image: spotify/kafka
  webapp:
     image: foo/bar # your image
  tests:
     image: bar/foo # your image
     command: dockerize -wait tcp://kafka:9092 -wait web://webapp:8080 YOUR_TEST_COMMAND
0
jkukul