Après avoir exécuté ceci;
eval $(docker-machine env mymachine)
Comment vérifier si le démon docker de mymachine
est un gestionnaire d'essaims?
Je n'ai pas de nœud d'essaim à portée de main pour le moment, mais il semblerait que vous puissiez simplement exécuter quelque chose comme docker node ls
. Lorsque vous ciblez un démon docker qui est pas dans un nœud swarm, cela se traduit par:
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
Et cela retourne un code de sortie différent de zéro
$ echo $?
1
Donc, le test ressemblerait à quelque chose comme:
if docker node ls > /dev/null 2>&1; then
echo this is a swarm node
else
echo this is a standalone node
fi
Vous pouvez également utiliser docker info
pour voir le résultat de la propriété Swarm
(inactive
ou active
).
Par exemple:
function isSwarmNode(){
if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then
echo false;
else
echo true;
fi
}
Ma méthode préférée consiste à utiliser la sortie formatée à partir de docker info
. Les valeurs possibles de ceci sont actuellement inactif, en attente, actif, verrouillé et erreur :
if [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "inactive" ]; then
echo node is not in a swarm cluster
Elif [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "pending" ]; then
echo node is in a swarm but no quorum
Elif [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "active" ]; then
echo node is in a swarm and healthy
Elif [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "locked" ]; then
echo node is in a swarm but the cluster is locked
Elif [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "error" ]; then
echo unknown error state
else
echo unknown state
fi
Assurez-vous que vos variables d'environnement docker sont définies correctement
$ env | grep DOCKER_
Comparez les valeurs d'URL et de port avec la sortie de
$ docker-machine ls
Sélectionnez le nom de la machine maîtresse d'essaim et vous pourrez réinitialiser les variables d'environnement à l'aide de
$ eval $ (docker-machine env your_master_master_nom_machine)
Une fois les variables d’environnement définies correctement, votre commande
$ docker info | egrep '^ Swarm:' | cut -d '' -f2
devrait donner le résultat correct
En plus de la réponse larsks, si vous exécutez docker node ls
lorsque vous pointez sur un nœud de travail, vous obtiendrez le message suivant:
Réponse d'erreur du démon: ce nœud n'est pas un gestionnaire d'essaims. Les nœuds de travail ne peuvent pas être utilisés pour afficher ou modifier l'état du cluster. Veuillez exécuter cette commande sur un nœud de gestionnaire ou promouvoir le nœud actuel en un gestionnaire.
Vous pouvez l'utiliser pour différencier les noeuds de travail et les noeuds qui ne font pas partie d'un essaim.