2015-11-20 2 views
7

は、私は、次のかなり基本的に取得しようとしていますブリッジネットワーク内のホスト名を自動発見:ドッカーネットワーキング:ドッカー1.9使用して動作するようにセットアップネットワーキング(またはそう思った)

  • 私は実行し、複数の容器を持っていますサービス、例えばpostgresコンテナとpythonコンテナ(2つ以上存在する可能性があります)。
  • これらのコンテナは、bridgeネットワークを介して相互に接続されています。
  • 一意のホスト名を使用してアドレス指定できるようにしたい(つまり、PythonコンテナがPostgresコンテナにpingするためにping postgresを実行できるはずです)。

チュートリアル(https://docs.docker.com/engine/userguide/networking/dockernetworks/が)、私はこれを達成するために次の一連のコマンドを使用することができ、次のとおりです。

#create the containers 
docker run -itd --name container1 busybox 
docker run -itd --name container2 busybox 
#create the network 
docker network create test 
docker network connect test container1 
docker network connect test container2 

これは非常にうまく機能し、ドッカーが正しく、正しいIPを指すようにetc/hostsのエントリを設定し、アドレス。ただし、そのセットアップの複数のインスタンス(コンテナ+ネットワーク)を同時に実行できるようにしたいと考えています。これは、/etc/hostsファイル内の各コンテナのエントリがの名前と等しく、一意である必要があるため動作しません。 hostnameパラメータを指定しても、この問題は解決されません。これは、コンテナのホスト名(つまり、自身が認識するホスト名)のローカルのみを変更するためです。

私は、コンテナでDNSサービスを実行していることに頼らずにこれを行う方法に非常に興味があります。これは簡単な問題ですが、残念ながら/etc/hostsファイルのコンテナ名を変更するための設定オプションが見つかりませんでした。

私はホスト名がコンテナにホスト名を動的に渡す必要がないように(例えば、PythonコンテナにPostgresコンテナのアドレスを伝えるために)ネットワーク+コンテナ設定のすべてのインスタンスでホスト名を同じにしたい)

EDIT:私は、ドッカーの課題追跡にいくつかの研究を行なったし、パイプラインで、このための機能があるように思われる:https://github.com/docker/libnetwork/issues/737

+1

これは非常に重要な質問です。['--link :alias'](https://docs.docker.com/v1.8/reference/run/#env-environment-variables) "Legacy links"(http://docs.docker.com/engine/userguide/networking/dockernetworks/#legacy-links))では、2つのコンテナ(同じドッカーデーモンによって管理される)間の "エイリアス"を定義することができました。そのエイリアスは別の 'docker run'によって再利用され、各エイリアスはエイリアス化されたリンクされたコンテナ(同じエイリアスを持つ)を見ることができます。私は新しいlibnetworkで同じ機能を見つけられませんでした。 – VonC

+0

はい私はこれについても読んで、1.9で同様の機能を見つけることができませんでした – ThePhysicist

答えて

5

docker 1.10, and PR 19242は助けることができます。

docker create --net-alias=[]: Add network-scoped alias for the container 
リンクは、コンテナ内に局在化されたプライベートな名前解決を提供するが、ネットワークスコープのエイリアスは、コンテナが他のことで代替名によって発見されるための方法を提供し

ドッキングウィンドウ1.10は、新しいセクションNetwork-scoped aliasを持っています特定のネットワークの範囲内のコンテナ。
サービスのコンシューマによって定義されるリンクエイリアスとは異なり、ネットワークスコープエイリアスは、サービスをネットワークに提供しているコンテナによって定義されます。

上記の例を続けると、ネットワーク別名でisolated_nwに別のコンテナを作成します。

$ docker run --net=isolated_nw -itd --name=container6 --net-alias app busybox 
8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17 

今、私たちは、異なるネットワークスコープの別名でlocal_aliasネットワークにcontainer6を接続してみましょう。この例では

$ docker network connect --alias scoped-app local_alias container6 

container6今ネットワークisolated_nwおよびネットワークlocal_aliasscoped-appようappとしてエイリアスされています。

関連する問題