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.
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.
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