webdevqa.jp.net

レジストリのデプロイ中に、Docker Swarmでこの問題「適切なノードがない(スケジューリング制約が1つのノードで満たされていません)」を修正するにはどうすればよいですか?

2コアの4GB RAM Centosを搭載した仮想マシンにdocker swarmがあります。

スウォームでDockerプライベートレジストリ(レジストリ2.6.4)をデプロイすると、サービスステータスが保留中と表示されます。私はdocker service ps <<registry_name>>

そしてdocker inspect <<task_id>>メッセージでこれを取得しました "適切なノードがありません(1つのノードでスケジュールの制約が満たされていません)"。

サービスの再起動と再展開を試しました。

これを修正するには?

10
Arul Ranjith

構成ファイルで定義されたノードラベルと実際のノードで定義されたノードラベルの間に不一致があると、この問題によく遭遇します。これは、間違ったラベル(タイプミスなど)を設定したか、単にノードにラベルを付けるのを忘れたためです。

ノードにラベルを付けるには:

1)各ターゲットノードに対して、次を実行します。

docker-machine ssh <manager_node_name> 'docker node update --label-add <label_name>=<label_value> <target_node_name>'

2)作成ファイルで定義されているものと一致することを確認します。

3)マネージャーノードでDockerサービスを再起動します

例:

作成ファイル:

 dummycontainer:
    image: group/dummyimage
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.labels.dummy_label == dummy]
      restart_policy:
        condition: on-failure

dummy_nodeという名前のノードにこのレプリカをデプロイすることを想定しています:

docker-machine ssh manager_node 'docker node update --label-add dummy_label=dummy dummy_node'

マネージャーノードでdockerを再起動します。

最後に、デプロイする場合、両方の手順でラベルが正しく設定されていると想定して、dummycontainerがdummy_nodeで実行されることを期待する必要があります。それ以外の場合は、発生しているエラーが表示されることが予想されます。

宜しくお願いします

7
João Matos