执行此操作后;
eval $(docker-machine env mymachine)
如何检查mymachine
上的docker守护程序是否为群组管理器?
答案 0 :(得分:11)
您还可以使用docker info
查看Swarm
属性(inactive
或active
)的结果。
例如:
function isSwarmNode(){
if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then
echo false;
else
echo true;
fi
}
答案 1 :(得分:6)
我目前没有方便的swarm节点,但看起来你可以像docker node ls
一样运行。在swarm节点中定位不的docker守护程序时,会导致:
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.
并返回非零退出代码
$ echo $?
1
所以测试看起来像:
if docker node ls > /dev/null 2>&1; then
echo this is a swarm node
else
echo this is a standalone node
fi
答案 2 :(得分:4)
要检查常规群组成员资格,我首选的方法是使用docker info
的格式化输出。可能的值为currently inactive, pending, active, locked, and 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
要检查管理员状态,而不仅仅是群集中的节点,您想要的字段是.Swarm.ControlAvailable
:
docker info --format '{{.Swarm.ControlAvailable}}'
这将为经理输出“true”,对于任何一个工人或不在群中的节点输出“false”。
要识别工作人员节点,您可以加入两个:
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
答案 3 :(得分:0)
除了larsks的回答,如果在指向工作节点时运行docker node ls
,您将收到以下消息:
来自守护程序的错误响应:此节点不是群集管理器。工作线程节点不能用于查看或修改群集状态。请在管理器节点上运行此命令,或将当前节点提升为管理员。
您可以使用它来区分工作节点和不在群中的节点。
答案 4 :(得分:0)
确保正确设置了docker环境变量
$ env | grep DOCKER _
将url和端口值与来自的输出进行比较
$ docker-machine ls
选择集群主计算机名称,然后可以使用重置环境变量
$ eval $(docker-machine env your_master_machine_name)
正确设置环境变量后,您的命令
$ docker信息| egrep'^ Swarm:'|切-d''-f2
应该给出正确的结果
答案 5 :(得分:0)
要使用bash从任何节点(工作者或管理者)获取管理者的IP地址,您可以执行以下操作:
read manager_ip _ <<<$(IFS=':'; echo $(docker info --format "{{ (index .Swarm.RemoteManagers 0).Addr }}"))
echo "${manager_ip}"
如上所述,确定当前节点是否为管理者的最直接方法是使用:
docker info --format '{{.Swarm.ControlAvailable}}'