2コアの4GB RAM Centosを搭載した仮想マシンにdocker swarmがあります。
スウォームでDockerプライベートレジストリ(レジストリ2.6.4)をデプロイすると、サービスステータスが保留中と表示されます。私はdocker service ps <<registry_name>>
そしてdocker inspect <<task_id>>
メッセージでこれを取得しました "適切なノードがありません(1つのノードでスケジュールの制約が満たされていません)"。
サービスの再起動と再展開を試しました。
これを修正するには?
構成ファイルで定義されたノードラベルと実際のノードで定義されたノードラベルの間に不一致があると、この問題によく遭遇します。これは、間違ったラベル(タイプミスなど)を設定したか、単にノードにラベルを付けるのを忘れたためです。
ノードにラベルを付けるには:
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で実行されることを期待する必要があります。それ以外の場合は、発生しているエラーが表示されることが予想されます。
宜しくお願いします