IPアドレスの代わりに名前を使用してDockerコンテナに到達する方法はありますか?
パイプラインのことを聞いたことがあり、DockerのDNSとホスト名タイプのオプションを見たことがありますが、すべてをつなぎ合わせることができません。
お時間をいただきありがとうございます。
これが役立つかどうかはわかりませんが、これは私がこれまでに行ったことです:
DNSエイリアスエントリをプライベートネットワークDNSサーバーに追加しましたが、それはdocker-machineが使用するマシン名と一致します。ただし、マシンは起動してネットワークに接続するときに常に別のIPアドレスを取得します。
私はこれに取り組む場所について迷っています:
私はおそらくこの質問に似たものを探しています:
パイプルーターではなく、dockerがネットワークルーターを使用してdhcp ipをコンテナーに簡単に割り当てるにはどうすればよいですか?
一般的な方向性は素晴らしいものになります...ありがとうございます!
Docker 1.10
にはDNSが組み込まれています。コンテナが同じユーザー定義ネットワークに接続されている場合(ネットワークdocker network create my-network
を作成し、--net my-network
でコンテナを実行します)コンテナ名を使用して相互に参照できます。 ( ドキュメント )。
クール!
Docker Composeを使用している場合、コンテナ名にプレフィックスが追加されることを知っておく必要があります。つまり、<project name>_<service name>-#
です。これにより、コンテナ名を制御するのが多少難しくなりますが、ユースケースには問題ないかもしれません。 コンポーズテンプレートでコンテナ名を手動で設定することで、Dockerコンポーズネーミング機能をオーバーライドできますが、コンポーズでスケーリングすることはできません 。
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を実行すると、動作するはずです。
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 パラメーターを使用することもできます。
Dnsdockを試してみてください。セットアップは簡単で簡単です。 http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ および https://github.com/tonistiigi/をご覧くださいdnsdock 。
--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>