J'utilise le docker-compose
.
Certaines commandes aiment up -d service_name
ou start service_name
retournent tout de suite et cela est assez utile si vous ne voulez pas que les conteneurs en cours d'exécution dépendent de l'état du shell, comme ils le font avec regular up service_name
. Le seul cas d'utilisation est de l'exécuter à partir d'une sorte de serveur d'intégration / livraison continue.
Mais cette façon de lancer / démarrer les services ne fournit aucun retour sur l'état réel du service par la suite.
La référence CLI de Docker Compose pour la up
commande mentionne l'option appropriée, mais, comme pour la version 1.7.1
, elle s'exclut mutuellement avec -d
:
--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
Puis-je en quelque sorte vérifier manuellement que le conteneur fonctionne bien et ne s'est pas arrêté en raison d'une erreur?
la source
docker ps -q -f "status=running" --no-trunc | grep $(docker-compose ps -q <service_name>)
grep ....
pièce se retrouve avec une chaîne vide.if [ -z `docker-compose ps -q mysql` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q mysql)` ]; then
. Ce que cela signifie: il vérifie d'abord si le service existe (même s'il est arrêté) et la deuxième partie vérifie si le service existant est réellement en cours d'exécution. Vous voudrez peut-être l'inclure dans votre exemple pour les futurs lecteurs qui ne regardent que la réponse acceptée. Je pense que c'est utile.Quant à la version
1.7.1
, il n'y a pas de telles commandes intégrées.Au lieu de cela, le
exec
peut être utilisé de la même manière.Lorsque vous l'exécutez pour le service qui contient des conteneurs, il fonctionnera correctement:
Mais lorsque vous l'exécutez pour le service qui n'a aucun conteneur de service en cours d'exécution , il affiche une erreur:
Ainsi, il peut être utilisé pour vérifier s'il existe des conteneurs "vivants" pour un service donné.
la source
Tu peux courir:
Et vous obtiendrez l'identifiant du conteneur s'il
service-name
est en cours d'exécution. Quelque chose comme:Si le service n'est pas en cours d'exécution, la sortie est vide, donc si vous souhaitez l'utiliser dans un script, vous pouvez faire quelque chose comme:
la source
docker-compose up
ensuite Ctrl-C.docker-compose ps
devrait alors montrer que les états du conteneur ne sont pas "Up", maisdocker-compose ps -q service-name
vous donne toujours un identifiant.J'avais un besoin similaire. Cependant, j'en ai un
restart: always
dans mon environnement. Il peut donc être un peu difficile de détecter si quelque chose plante et redémarre en boucle.J'ai fait un contrôle Icinga / Nagios pour comparer également les heures de création et de démarrage. Peut-être que c'est utile à quelqu'un d'autre sur la ligne:
la source
Si vous supposez ce scénario:
vous pouvez vérifier s'il y a un conteneur arrêté en raison d'une erreur:
docker ps -a | grep 'Exited (255)'
.Cette vérification fonctionne correctement même dans le cas de conteneurs qui devraient s'arrêter immédiatement sans erreur (c'est-à-dire des conteneurs de données), car leur état (de
docker ps -a
) est marqué commeExited (0)
.Par exemple, dans notre docker-compose.yml, nous commençons nos conteneurs avec:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Pour php-fpm, nous utilisons une commande similaire:
Les
dotenv_check.js
etdotenv_check.php
sont des scripts qui se terminent avec un code d'erreur au cas où une variable env requise serait manquante.La
set -e
commande indique au script de s'arrêter en cas d'erreur, ce qui, à son tour, arrête immédiatement le conteneur. À propos de set-ela source
Que dis-tu de ça?
vous listez les processus, sélectionnez les lignes où "Up" est dans la colonne 4 et filtrez pour une correspondance sur le nom du service.
la source