Después de ejecutar esto;
eval $(docker-machine env mymachine)
¿Cómo verifico si el demonio de la ventana acoplable en mymachine
es un administrador de enjambres?
Para verificar la membresía general del enjambre, mi método preferido es usar la salida formateada de docker info
. Los posibles valores de esto son actualmente inactivo, pendiente, activo, bloqueado y error :
case "$(docker info --format '{{.Swarm.LocalNodeState}}')" in inactive) echo "Node is not in a swarm cluster";; pending) echo "Node is not in a swarm cluster";; active) echo "Node is in a swarm cluster";; locked) echo "Node is in a locked swarm cluster";; error) echo "Node is in an error state";; *) echo "Unknown state $(docker info --format '{{.Swarm.LocalNodeState}}')";; esac
Para verificar el estado del administrador, en lugar de solo un nodo en un clúster, el campo que desea es .Swarm.ControlAvailable
:
docker info --format '{{.Swarm.ControlAvailable}}'
Eso generará "verdadero" para los administradores y "falso" para cualquier nodo que sea un trabajador o no en un enjambre.
Para identificar los nodos trabajadores, puede unirse a dos:
if [ "$(docker info --format '{{.Swarm.LocalNodeState}}')" = "active" \ -a "$(docker info --format '{{.Swarm.ControlAvailable}}')" = "false" ]; then echo "node is a worker" else echo "node is not a worker" fi
También puede usar la docker info
para ver el resultado de la propiedad Swarm
( inactive
o active
).
Por ejemplo:
function isSwarmNode(){ if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then echo false; else echo true; fi }
No tengo un nodo de enjambre a mano en este momento, pero parece que podría simplemente ejecutar algo como docker node ls
. Al apuntar a un demonio docker que no está en el nodo de enjambre, eso da como resultado:
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.
Y devuelve un código de salida distinto de cero
$ echo $? 1
Así que la prueba sería algo como:
if docker node ls > /dev/null 2>&1; then echo this is a swarm node else echo this is a standalone node fi