如何检查 docker 主机是否处于群模式?
How do I check that a docker host is in swarm mode?
执行完后;
eval $(docker-machine env mymachine)
如何检查 mymachine
上的 docker 守护进程是否是 swarm 管理器?
我现在手边没有 swarm 节点,但看起来你可以简单地 运行 类似 docker node ls
的东西。当目标 docker 守护进程在 swarm 节点中是 not 时,结果是:
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.
它 returns 一个非零退出代码
$ 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
除了 larsks answer 之外,如果您 运行 docker node ls
指向工作节点时,您将收到以下消息:
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
您可以使用它来区分工作节点和根本不在集群中的节点。
您还可以使用 docker info
查看 Swarm
属性(inactive
或 active
)的结果。
例如:
function isSwarmNode(){
if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then
echo false;
else
echo true;
fi
}
要检查一般群成员,我的首选方法是使用 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
确保您的 docker 环境变量设置正确
$环境 | grep DOCKER_
将 url 和端口值与
的输出进行比较
$docker-机器 ls
Select swarm master 机器名,你可以使用
重置环境变量
$eval $(docker-机器环境 your_master_machine_name)
正确设置环境变量后,您的命令
$docker 信息 | egrep '^Swarm:' |剪切-d ' ' -f2
应该给出正确的结果
要使用 bash 从任何节点(工作人员或管理器)获取管理器的 IP 地址,您可以执行以下操作:
read manager_ip _ <<<$(IFS=':'; echo $(docker info --format "{{ (index .Swarm.RemoteManagers 0).Addr }}"))
echo "${manager_ip}"
如上所述,最直接的判断当前节点是否为manager的方式是:
docker info --format '{{.Swarm.ControlAvailable}}'
执行完后;
eval $(docker-machine env mymachine)
如何检查 mymachine
上的 docker 守护进程是否是 swarm 管理器?
我现在手边没有 swarm 节点,但看起来你可以简单地 运行 类似 docker node ls
的东西。当目标 docker 守护进程在 swarm 节点中是 not 时,结果是:
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.
它 returns 一个非零退出代码
$ 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
除了 larsks answer 之外,如果您 运行 docker node ls
指向工作节点时,您将收到以下消息:
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
您可以使用它来区分工作节点和根本不在集群中的节点。
您还可以使用 docker info
查看 Swarm
属性(inactive
或 active
)的结果。
例如:
function isSwarmNode(){
if [ "$(docker info | grep Swarm | sed 's/Swarm: //g')" == "inactive" ]; then
echo false;
else
echo true;
fi
}
要检查一般群成员,我的首选方法是使用 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
确保您的 docker 环境变量设置正确
$环境 | grep DOCKER_
将 url 和端口值与
的输出进行比较$docker-机器 ls
Select swarm master 机器名,你可以使用
重置环境变量$eval $(docker-机器环境 your_master_machine_name)
正确设置环境变量后,您的命令
$docker 信息 | egrep '^Swarm:' |剪切-d ' ' -f2
应该给出正确的结果
要使用 bash 从任何节点(工作人员或管理器)获取管理器的 IP 地址,您可以执行以下操作:
read manager_ip _ <<<$(IFS=':'; echo $(docker info --format "{{ (index .Swarm.RemoteManagers 0).Addr }}"))
echo "${manager_ip}"
如上所述,最直接的判断当前节点是否为manager的方式是:
docker info --format '{{.Swarm.ControlAvailable}}'