Jusqu'à récemment, quand on faisait docker-compose up
pour un tas de conteneurs et l'un des conteneurs démarrés s'est arrêté, tous les conteneurs ont été arrêtés. Ce n'est plus le cas depuis https://github.com/docker/compose/issues/741 et c'est vraiment très ennuyeux pour nous: nous utilisons docker-compose pour exécuter des tests Selenium ce qui signifie commencer serveur d'applications, démarrage du concentrateur Selenium + nœuds, démarrage du pilote de test, puis sortie lorsque le pilote de test s'arrête.
Existe-t-il un moyen de retrouver un ancien comportement?
Vous pouvez utiliser:
docker-compose up --abort-on-container-exit
Qui arrêtera tous les conteneurs si l'un de vos conteneurs s'arrête
Avez-vous essayé le travail proposé sur le lien que vous avez fourni?
En supposant que votre script de test ressemble à ceci:
$ docker-compose rm -f
$ docker-compose build
$ docker-compose up --timeout 1 --no-build
À la fin des tests d'application, la composition se termine et les tests se terminent.
Dans ce cas, avec le nouveau docker-compose
version, changez votre conteneur de test pour avoir une commande no-op par défaut (quelque chose comme echo ou true), et changez votre script de test comme suit:
$ docker-compose rm -f
$ docker-compose build
$ docker-compose up --timeout 1 --no-build -d
$ docker-compose run tests test_command...
$ docker-compose stop
L'utilisation de run vous permet d'obtenir l'état de sortie du test et vous ne voyez que la sortie des tests (pas toutes les dépendances).
Si cela n'est pas acceptable, vous pouvez vous référer à Docker Remote API et surveiller l'événement stop
pour les conteneurs et agir en conséquence.
Un exemple d'utilisation est cet docker-gen outil écrit en golang
qui surveille les événements de démarrage du conteneur , pour régénérer automatiquement les fichiers de configuration.
Dans votre fichier de composition Docker, configurez votre conteneur de pilote de test pour qu'il dépende des autres conteneurs (avec depends_on
paramètre). Votre fichier de composition Docker devrait ressembler à ceci:
services:
application_server:
...
Selenium:
...
test_driver:
entry_point: YOUR_TEST_COMMAND
depends_on:
- application_server
- Selenium
Avec les dépendances exprimées de cette façon, exécutez:
docker-compose run test_driver
et tous les autres conteneurs s'arrêteront lorsque le test_driver
le conteneur est terminé.
Cette solution est une alternative au docker-compose up --abort-on-container-exit
réponse . Ce dernier fermera également tous les autres conteneurs si l'un d'eux se termine (pas seulement le pilote de test ). Cela dépend de votre cas d'utilisation lequel est le plus adéquat.
Je ne suis pas sûr que ce soit la réponse parfaite à votre problème, mais maestro pour Docker, vous permet de gérer plusieurs conteneurs Docker comme une seule unité.
Cela devrait vous sembler familier lorsque vous les regroupez à l'aide d'un fichier YAML.