2017-04-19 6 views
1

コンテナのクラスタを実行しようとしています。各インスタンスには、環境変数を使用して、他のインスタンスのホストとポートのリストが与えられます。 ドッカーネットワーク(つまり、ホストネットワーキングではない)を使用したいと考えています。私の考えは、だから私はこの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スクリプトを使用します。

+0

あなたはドッカー作曲などのツールを使用していないため、何らかの理由はありますか? –

答えて

0

私はwait-for-itのような何かをするイメージのエントリポイントを変更したり追加したりします。コンテナを任意の順序で起動することができます。競合状態を心配する必要はなく、まだ存在しないコンテナのDNSアドレスを注入する必要はありません。

+0

待ち時間は面白いアプローチのように見えます。悲しいかな、ホスト+ポートにpingするので、それは箱からは出ませんので、他のコンテナはポートを開く必要があります。他のサービスを起動して実行する必要があります。たぶん、私はそれがちょうど成功したDNSルックアップを待つように待つためにそれを適応させることができます。 – PalatinateJ

+0

シェルスクリプトを使うと、 'while! ping -n 1 $ホスト; 5寝る。 done( '-c 1'かもしれません)。待っている必要はありません。 – BMitch

0

私は "--add-host"オプションを使って/ etc/hostsファイルに偽のエントリを追加しようとしましたが、この偽のエントリはDNSルックアップを "シャドー"してしまいます。他のインスタンスが起動されても適切なIPアドレスを参照してください。

私はあなたがすべてのコンテナに特定のIPアドレスを割り当てると、このアプローチを組み合わせることを示唆している:

docker run --name x1 --add-host="x2:172.17.42.102" --add-host="x3:172.17.42.103" --ip="172.17.42.101" --network=mynet -d my/image

+0

私はむしろIPを明示的に割り当てる必要はありませんが、これは可能なフォールバックのように聞こえます.Weeee-for-DNSや、BMitchが言及したWA-FOR- – PalatinateJ

+0

@PalatinateJはこれを回避策と考えています。しかし、私はあなたのコンテナの内部で実行されているソフトウェアは非常に悪いと言わなければならない。現代のシステム、特に分散システムは、この種の些細なエラーに対してフォールトトレラントでなければならない。 –

+0

あなたは当然ですが、ソフトウェアは名前付きインスタンス(これは完璧に処理しますが、BTW ...)に対して他の接続問題を扱うように、DNSルックアップの問題を処理する必要がありますが、サードパーティ製の製品です私は本当にそれを変更することはできません。 – PalatinateJ

関連する問題