スタックがすでにデプロイされた後で、スタックにサービスを追加しようとしています。しかし、この新しいサービスは、スタック内のサービス (redis) との通信に問題があります。
これは、スタックとサービスに関する私の現在の理解です。不正確な点がある場合はお知らせください。
スタックは、スタック全体のサービスが相互に通信できるように、DNS などの便利なユーティリティを提供するサービスを抽象化したものです。スタックを使用すると、同じ群れで実行されている可能性のあるサービスのグループを論理的に分離できます (そのため、異なる開発チームが同じ群れを共有できます)。
最初に (構成ファイルを介して) スタックを swarm にデプロイし、次に、ワンショット コンテナーに関するこの記事で説明されているようなコンテナーを定期的に追加したいと考えています。これらのコンテナは、長時間のステートフル オペレーションを実行しているため、異なります。何らかの初期状態でスピンアップし、仕事をしてから立ち去る必要があります。レプリケートや負荷分散の必要がないため、両者は異なります。
基本的に私がやろうとしていることは次のとおりです。
次のように「スタック」を起動します。
docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack
そしてしばらくして、特定の基準が満たされたときに、次のようなコンテナーを追加します。
docker service create -name statefulservice reponame/imagename
これは通常、statefulservice が my-stack 内の redis と通信できないことを除いて、期待どおりに動作します。
docker-compose.yml に追加すると期待どおりに動作するため、statefulservice は正しく設計されていると確信しています。
関連する場合と関連しない場合があるその他の詳細は、新しいサービスを作成するコマンドが群れ内のコンテナーから発行されることです。これは、docker 用の go sdk を使用して発生します。私は、ワンショット コンテナーの記事で説明した方法で使用しています。
これが関連していないと思われる理由: docker-cli のみを介してこの操作を行う場合 (および go に docker sdk を使用しない場合)、この問題に遭遇します。