これを実行した後;
eval $(docker-machine env mymachine)
mymachine
のdockerデーモンがswarm 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
からのフォーマットされた出力を使用する方法が推奨されます。これの可能な値は 現在非アクティブ、保留中、アクティブ、ロック、およびエラー です。
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」を出力します。
ワーカーノードを識別するには、次の2つに参加できます。
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
現時点では、swarmノードはありませんが、docker node ls
のように実行できるようです。 swarmノードでnotである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
Docker環境変数が正しく設定されていることを確認してください
$ env | grep DOCKER_
URLとポートの値をからの出力と比較する
$ docker-machine ls
スウォームマスターマシン名を選択すると、次のコマンドを使用して環境変数をリセットできます
$ eval $(docker-machine env your_master_machine_name)
環境変数が適切に設定されたら、コマンド
$ docker info | egrep '^ Swarm:' |カット-d '' -f2
正しい結果が得られるはずです
ラークの回答に加えて、docker node ls
ワーカーノードを指すと、次のメッセージが表示されます。
デーモンからのエラー応答:このノードはスウォームマネージャではありません。ワーカーノードを使用してクラスターの状態を表示または変更することはできません。このコマンドをマネージャーノードで実行するか、現在のノードをマネージャーに昇格してください。
これを使用して、ワーカーノードと、スウォームにまったくないノードを区別できます。