web-dev-qa-db-ja.com

IPアドレスの代わりに名前でdockerコンテナーに到達する方法は?

IPアドレスの代わりに名前を使用してDockerコンテナに到達する方法はありますか?

パイプラインのことを聞いたことがあり、DockerのDNSとホスト名タイプのオプションを見たことがありますが、すべてをつなぎ合わせることができません。

お時間をいただきありがとうございます。

これが役立つかどうかはわかりませんが、これは私がこれまでに行ったことです:

  • docker-machineおよびvmwarevsphereドライバーを使用してインストールされたdocker containerホスト
  • docker-composeですべてのサービスを開始しました
  • IPとポートを使用して、ネットワーク上の他のマシンからすべてのサービスにアクセスできます。

DNSエイリアスエントリをプライベートネットワークDNSサーバーに追加しましたが、それはdocker-machineが使用するマシン名と一致します。ただし、マシンは起動してネットワークに接続するときに常に別のIPアドレスを取得します。

私はこれに取り組む場所について迷っています:

  • ネットワークDNSサーバー
  • docker-machineホスト名
  • dockerコンテナのホスト名
  • おそらくそれらすべての組み合わせ

私はおそらくこの質問に似たものを探しています:

パイプルーターではなく、dockerがネットワークルーターを使用してdhcp ipをコンテナーに簡単に割り当てるにはどうすればよいですか?

一般的な方向性は素晴らしいものになります...ありがとうございます!

31
A L

Docker 1.10にはDNSが組み込まれています。コンテナが同じユーザー定義ネットワークに接続されている場合(ネットワークdocker network create my-networkを作成し、--net my-networkでコンテナを実行します)コンテナ名を使用して相互に参照できます。 ( ドキュメント )。

クール!

Docker Composeを使用している場合、コンテナ名にプレフィックスが追加されることを知っておく必要があります。つまり、<project name>_<service name>-#です。これにより、コンテナ名を制御するのが多少難しくなりますが、ユースケースには問題ないかもしれません。 コンポーズテンプレートでコンテナ名を手動で設定することで、Dockerコンポーズネーミング機能をオーバーライドできますが、コンポーズでスケーリングすることはできません

21
datacarl

Docker0以外の新しいブリッジネットワークを作成し、その内部でコンテナーを実行すると、そのネットワーク内のコンテナーを名前で参照できます。

Dockerデーモンは、組み込みのDNSサーバーを実行して、ユーザー定義ネットワークに接続されたコンテナーの自動サービス検出を提供します。コンテナからの名前解決要求は、最初に組み込みDNSサーバーによって処理されます。

これを試して:

docker network create <network name>
docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000
docker run --net <network name> busybox ping test

まず、新しいネットワークを作成します。次に、testという名前のbusyboxコンテナーを実行します(ポート7000でリッスンします(実行し続けるためだけです))。最後に、名前によってテストコンテナにpingを実行すると、動作するはずです。

5
rogamba

EDIT 2018-02-17:Dockerは最終的にdocker-composeからlinksキーを削除する可能性があるため、 ser-defined networks ここで述べたように== https ://docs.docker.com/compose/compose-file/#links


次のようなdocker-compose.ymlファイルのmysqlコンテナーからwebコンテナーに到達したいと仮定します。

web:
  build: .
  links:
    - mysql

mysqlservice:
  image: mysql

Docker Composeは、mysqlserviceコンテナーを指すwebドメイン名(mysqlコンテナー/etc/hosts)を既に追加していることを喜ばしく思います。

mysqlコンテナIPアドレスを探す代わりに、mysqlserviceドメイン名を使用できます。

カスタムドメイン名を追加する場合は、 extra_hosts パラメーターを使用することもできます。

4
Oliboy50

Dnsdockを試してみてください。セットアップは簡単で簡単です。 http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ および https://github.com/tonistiigi/をご覧くださいdnsdock

3
Andreas Steffan

すぐに使用できるソリューションが必要な場合は、たとえば Kontena を確認することをお勧めします。 Weave のネットワークオーバーレイテクノロジーが付属しており、このテクノロジーはサービス間の仮想プライベートLANネットワークの作成に使用されます。おかげで、すべてのサービス/コンテナにservice_name.kontena.local

3
Lauri

--netパラメーターを--networkパラメーターに変更すると、期待どおりに実行されます。

docker network create <network name>
docker run --network <network name> --name <container name> <other container options>
docker run --network <network name> --name <container name> <other container options>
2
Oscar Llop