コンテナのクラスタを実行しようとしています。各インスタンスには、環境変数を使用して、他のインスタンスのホストとポートのリストが与えられます。 ドッカーネットワーク(つまり、ホストネットワーキングではない)を使用したいと考えています。私の考えは、だから私はこのDocker:まだ開始されていないコンテナのDNSエントリを別のコンテナで利用できるようにするには
docker run --name x1 -e clusterMembers=x2:12345,x3:12345 --network=mynet -d my/image
docker run --name x2 -e clusterMembers=x1:12345,x3:12345 --network=mynet -d my/image
docker run --name x3 -e clusterMembers=x1:12345,x2:12345 --network=mynet -d my/image
のようにそれらを開始したい各インスタンスに「--name」(または--network-エイリアス)との明示的なホスト名を与えるために、実行オプション、その後
ました問題は、ホスト名x2とx3を参照する最初のコンテナを起動すると、これらのホスト名はDockerネットワークDNS経由ではまだ存在しないということです。私のサーバが起動し、失敗し、サーバが再び終了する(いいえ、私はDNSルックアップを再試行するためにコードを変更できません:-) 他のインスタンスにまだ到達できない場合、サーバは失敗しません...それは、それが失敗したDNSルックアップを容認しないということだけである。
任意のアイデアコンテナ×1(及びコンテナX2にホスト名×3)にホスト名X2とX3が利用できるようにする方法?
私が試しました/ etc/hostsファイルに偽のエントリを追加するには "--add-host"オプションを使用しますが、もちろんこの偽のエントリはDNS検索を「シャドー」し、サーバは正しいIPアドレスを一度も見ないでしょう他のインスタンスが開始されます。
ホストネットワーキングを使用する以外は、これを行うための方法はありますか?
THX
PalatinateJ
私はBMitchの提案に基づいて思い付いたソリューションは、待ち、それスクリプトを取るわずかにそれを適応させることだったので、代わりに「pingを実行」ホストの+代わりに、特定のホストのDNSルックアップを行います。
次に、私のコンテナのエントリポイントスクリプトでは、上記の例の "clusterMembers"環境変数からホスト名を抽出し、各ホスト名を使用して私のwait-for-dnsスクリプトを使用します。
あなたはドッカー作曲などのツールを使用していないため、何らかの理由はありますか? –