問題タブ [docker-stack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - スタックがデプロイされた後のスタックへのサービスの追加
スタックがすでにデプロイされた後で、スタックにサービスを追加しようとしています。しかし、この新しいサービスは、スタック内のサービス (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 を使用しない場合)、この問題に遭遇します。
docker - 同じネットワーク上の Docker コンテナーが、公開されている互いのポートにアクセスできない (Linux)
これは、私がデプロイした非常に単純な docker スタックです。
docker stack deploy 後、すべてのサービスが実行されていることがわかります。ただし、Postman などのホストシステム上のプログラムからリポジトリまたは展開サービスの REST API にアクセスしようとすると、これは機能しません (接続がハングするだけです)。だから私はいくつかのデバッグを行いました:
1) コンテナーは、サービス名を使用してオーバーレイ ネットワーク上で相互に ping を実行できます。例えば
2) 1 つのコンテナーから、curl を使用して別のコンテナーにアクセスできますが、内部ポートでのみ使用できます。
たとえば、これは機能します:
しかし、これはエラーを返します:
3) オーバーレイ ネットワークに情報がないようです。
この正確なスタックを Mac にデプロイしようとすると、うまくいきます! また、オーバーレイ ネットワークの同じ検査は、はるかに多くの情報を提供します。1 つには、コンテナーのリストが表示され、サブネットとゲートウェイも表示されます。
私の Linux マシンでは、オーバーレイのネットワークが正しく設定されていません。ただし、どの構成を見逃したのかはわかりません。Mac の docker stack/swarm と Linux の docker stack/swarm の間に大きな違いはないようです。次に何を見たり試したりするべきかについての指針は非常に高く評価されます。