web-dev-qa-db-ja.com

docker Hostがスウォームモードであることを確認するにはどうすればよいですか?

これを実行した後;

eval $(docker-machine env mymachine)

mymachineのdockerデーモンがswarm managerかどうかを確認するにはどうすればよいですか?

14
Ernest Okot

docker infoを使用して、Swarmプロパティ(inactiveまたはactive)の結果を確認することもできます。

例えば:

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

一般的なスウォームメンバーシップを確認するには、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
13
BMitch

現時点では、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
7
larsks

Docker環境変数が正しく設定されていることを確認してください

$ env | grep DOCKER_

URLとポートの値をからの出力と比較する

$ docker-machine ls

スウォームマスターマシン名を選択すると、次のコマンドを使用して環境変数をリセットできます

$ eval $(docker-machine env your_master_machine_name)

環境変数が適切に設定されたら、コマンド

$ docker info | egrep '^ Swarm:' |カット-d '' -f2

正しい結果が得られるはずです

0
Raman Garg

ラークの回答に加えて、docker node lsワーカーノードを指すと、次のメッセージが表示されます。

デーモンからのエラー応答:このノードはスウォームマネージャではありません。ワーカーノードを使用してクラスターの状態を表示または変更することはできません。このコマンドをマネージャーノードで実行するか、現在のノードをマネージャーに昇格してください。

これを使用して、ワーカーノードと、スウォームにまったくないノードを区別できます。

0
TerekC