web-dev-qa-db-fra.com

Comment vérifier qu'un hôte docker est en mode essaim?

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?

8
Ernest Okot

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
6
larsks

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
}
6

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
2
BMitch

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

0
Raman Garg

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.

0
TerekC