如何检查泊坞主机是否处于群集模式?

Ern*_*kot 13 docker docker-machine

执行后;

eval $(docker-machine env mymachine)
Run Code Online (Sandbox Code Playgroud)

如何检查docker守护程序mymachine是否为群集管理器?

小智 19

您还可以使用docker info查看Swarm属性(inactiveactive)的结果.

例如:

function isSwarmNode(){
    if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then
        echo false;
    else
        echo true;
    fi
}
Run Code Online (Sandbox Code Playgroud)

  • [`docker info --format '{{.Swarm.LocalNodeState}}'`](/sf/answers/3541320121/) 解决方案似乎更有序。 (9认同)

BMi*_*tch 10

要检查一般群体成员身份,我的首选方法是使用中的格式化输出docker info。当前可能的值是非活动,挂起,活动,锁定和错误

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
Run Code Online (Sandbox Code Playgroud)

要检查管理器状态,而不仅仅是群集中的一个节点,您想要的字段是.Swarm.ControlAvailable

docker info --format '{{.Swarm.ControlAvailable}}'
Run Code Online (Sandbox Code Playgroud)

对于管理者,这将输出“ 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
Run Code Online (Sandbox Code Playgroud)


lar*_*sks 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.
Run Code Online (Sandbox Code Playgroud)

并返回非零退出代码

$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

所以测试看起来像:

if docker node ls > /dev/null 2>&1; then
  echo this is a swarm node
else
  echo this is a standalone node
fi
Run Code Online (Sandbox Code Playgroud)

  • 对于工作节点,此测试将失败. (4认同)
  • 正如@MarcelloRomani 指出的那样,此测试在工作节点中失败。正如 https://docs.docker.com/get-started/part4/ 中所写,有 2 种类型的 swarm 节点;管理节点和工作节点。即使工作节点是 swarm 节点,它也无法执行“docker node”(以及其他一些与 swarm 相关的)命令。所以,我建议查看“docker info”命令输出。 (2认同)