2017-08-01 7 views
0

私たちは1000sのPythonユニットテストを持っており、それらを効率的に実行するために、それらをバッチで並列化します。各バッチには、コアアプリケーションとmongoインスタンスで構成される独自のDocker環境があります。Docker Networking - リンクするかどうかを指定しますか?

docker network create --driver bridge ut_network-1

docker network create --driver bridge ut_network-2

docker run -d --name mongo-unittest-1 --network ut_network-1 mongo:3.4.2

docker run -d --name mongo-unittest-2 --network ut_network-1 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} --link mongo-unittest-{%}:db python discover.py

接続文字列は "27017/mydbというのMongoDB:::// DB" は、このようなセットアップ何か

{%}は環境に関連付けられた番号なので、ut_network-1ではデータベースはmongo-unittest-1になります。 'db'へのエイリアスに注意してください。

これはうまくいきますが、私は--link will be deprecatedを読んでいます。

私は解決策が--link削除し、ホスト名を設定するのと同じくらい簡単だろうと思った:

docker run -d --hostname db --network ut_network-1 mongo:3.4.2

docker run -d --hostname db --network ut_network-2 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} python discover.py

しかし、私はこれを行うならば、アプリケーションがmongoインスタンスを見つけることができません。さらに:ドッカーは、それが明らかに(彼らは別のネットワーク上にあるにもかかわらず)で行うことはできません「DB」と呼ばれる複数のコンテナを作成しようとしていましたので、

  • 私は--name dbを使用することはできません。
  • mongoデータベースのデフォルトのホスト名は、コンテナIDの最初の数桁です。私の単体テストはすべて、データベースが「db」と呼ばれることを前提とした秘密ファイルからmongoデータベース文字列を取得します。
  • 私が言ったように、--hostname dbを使用すると、コアアプリケーションはmongoインスタンスを見つけることができません。しかし、サーバとしてコンテナIDをハードコードすると、コアアプリケーションはmongoインスタンスをうまく見つけることができます。
  • 単体テストでは、混乱する必要のないmongoデータベース文字列の1つのソースを使用できるように、別名 'db'を保持します。

The documentation hereは私が --link使用することができますを意味します。

これは正しく行われていますか?そうでない場合は、複数のネットワークを作成して「db」の「静的」なホスト名をエイリアスできるように、Dockerネットワーキングをどのように設定する必要がありますか?

アドバイスをいただければ幸いです。

ありがとうございます!

答えて

1

はい、リンクは推奨されていません。回避する必要があります。 DNSの発見に関して、私はホスト名がうまくいくと思っていましたが、私はあなたが見ているのと同じ結果を見ています。コンテナ名に--name dbというユニークなコンテナの問題がありますので、あなたが見つけたのと同じ理由でこれをお勧めします。最善の解決策は、--network-alias dbとネットワークエイリアスの目標に直接移動することです:

docker run -d --network-alias db --network ut_network-1 mongo:3.4.2 

docker run -d --network-alias db --network ut_network-2 mongo:3.4.2 

docker run untapt_ut --rm --network ut_network-{%} python discover.py 
+0

天才、ありがとうございました。私が「エイリアス」という言葉を書いたら、私は中断しました...しかし、とにかく私の質問を発表することに決めました。ありがとう、あなたの応答だけでなく、これを完全に見て時間を費やすために。 –

関連する問題