Compose 2.9(ymlバージョン2.1)で「カスタム」ブリッジネットワークの「Ubuntu 16.10 Server」でいくつかのコンテナを実行しています。私のコンテナのほとんどは、内部的に同じポートを使用しているため、「ホスト」ネットワークドライバーを使用する方法はありません。専用のlinks
属性を使用して、私のコンテナーはすべて一緒にリンクされています。
ただし、コンテナの外部で公開されているサービスにもアクセスする必要があります。これらのサービスには、私の会社のDNSサーバーに登録された名前の専用URLがあります。パブリックDNSを使用して、コンテナ内からパブリックサービスにアクセスするのに問題はありませんが、プライベートDNSにはアクセスできません。
コンテナからプライベートDNSを使用する実用的なソリューションを知っていますか?それとも、ホストのネットワークDNS構成を使用しますか?
PS:もちろん、私のdocker-compose.ymlファイルのサービスの_extra_hosts
_属性を使用して、会社のサービスにリンクできます。しかし... ...それは間違いなくDNSを持つことの目標ではありません。すべてのサービスをYMLファイルに登録したくはありません。また、会社でサービスのIPが更新されるたびに更新したくありません。
コンテキスト:
docker-compose.ymlファイル(抽出):
_version: '2.1'
services:
nexus:
image: sonatype/nexus3:$NEXUS_VERSION
container_name: nexus
restart: always
hostname: nexus.$URL
ports:
- "$NEXUS_81:8081"
- "$NEXUS_443:8443"
extra_hosts:
- "repos.private.network:192.168.200.200"
dns:
- 192.168.3.7
- 192.168.111.1
- 192.168.10.5
- 192.168.10.15
volumes_from:
- nexus-data
networks:
- pic
networks:
pic:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
_
ipam
ネットワークのpic
構成ありとなしで、運なしで試しました。
テストと結果: _docker exec -ti nexus curl repos.private.network
_は、このサービスが提供するHTMLページを適切に返します
_docker exec -ti nexus curl another-service.private.network
_はcurl: (6) Could not resolve Host: another-service.private.network; Name or service not known
を返しますホストからの_curl another-service.private.network
_は適切なHTMLページを返します。
そして、「もちろん」_another-service.private.network
_は4つのDNSサーバー(192.168.3.7、192.168.111.1、192.168.10.5、192.168.10.15)で知られています。
Mac、Windows、Unixなどでdocker-composeを実行している環境を指定しないため、必要な変更に少し依存します。また、ユーザーが作成したブリッジネットワークのdockerでデフォルトのブリッジネットワークを使用するかどうかも指定しません。
いずれの場合も、デフォルトで、DockerはDockerホストからのDNS解決をコンテナーにマップしようとします。したがって、DockerホストがプライベートDNSアドレスを解決できる場合、理論的にはコンテナーも同様にできるはずです。
この公式Docker DNSドキュメントを読むのはかなり合理的であるため、お勧めします。 Here デフォルトのDockerブリッジネットワークの場合 here ユーザーが作成したブリッジネットワークの場合.
ちょっとした落とし穴は、Docker Mac、Docker Machine、またはDocker for Windowsを使用して実行している場合、Dockerホストは実際には物理的なボックスではなく、マシンで実行されているVMそのため、VMに正しいDNS解決オプションが設定されていることを確認する必要があります。DNS解決の変更を取得するには、コンテナを再起動する必要があります。
もちろん、docker-compose
を使用して、すべてのデフォルト設定をオーバーライドできます。 DNSサーバー、DNS検索オプションなどを明示的に設定するための完全なオプションがあります。例として:
version: 2
services:
application:
dns:
- 8.8.8.8
- 4.4.4.4
- 192.168.9.45
これらの機能に関するドキュメントがあります こちら 。