[解決済み] ホストDNSサーバを使用したDocker-composeコンテナ
質問
Ubuntu 16.10 Server" で、compose 2.9 (in a yml version 2.1) を使って、いくつかのコンテナをカスタムブリッジネットワークで動かしています。私のコンテナのほとんどは、内部で同じポートを使用しているため、"host"ネットワークドライバを使用する方法はありません。
私のコンテナはすべて一緒にリンクされており、専用の
links
属性を使用します。
しかし、私は自分のコンテナの外で公開されているサービスにもアクセスする必要があります。これらのサービスは、私の会社のDNSサーバーに登録された名前で専用のURLを持っています。 パブリックDNSを使用して、コンテナ内からパブリックサービスにアクセスするのは問題ありませんが、プライベートDNSにアクセスすることはできません。
コンテナからプライベートDNSを使用するための実用的な解決策をご存知ですか?あるいはさらに良い方法は、ホストのネットワークDNSの設定を使用することでしょうか?
追記:もちろん、自分の会社のサービスへのリンクは
extra_hosts
属性は、docker-compose.yml ファイルにある私のサービスの中にあります。しかし...それはDNSを持つことの目的とは決定的に違うのです。YMLファイルにすべてのサービスを登録する必要はありませんし、社内でサービスのIPが更新されるたびに更新するのも嫌です。
コンテキスト:
- ホスト Ubuntu 16.10サーバー
- Dockerエンジン: 1.12.6
- Docker Compose: 1.9.0
- docker-compose.yml。2.1
- ネットワーク 独自のブリッジ。
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ページが返されます。
そして、"of course"
another-service.private.network
が4つのDNSサーバー(192.168.3.7, 192.168.111.1, 192.168.10.5, 192.168.10.15) で既知であることがわかりました。
解決方法を教えてください。
docker-compose を実行する環境が Mac、Windows、Unix などと指定されていないため、どのような変更が必要なのかに少し依存します。また、docker のデフォルトのブリッジネットワークと、ユーザーが作成したブリッジネットワークのどちらを使用しているかも指定されていません。
どちらの場合でも、デフォルトでは、DockerはDocker HostからコンテナにDNS解決をマッピングしようとするはずです。したがって、Docker HostがプライベートDNSアドレスを解決できる場合、理論的にはコンテナも解決できるはずです。
このDocker DNSの公式ドキュメントはかなり合理的なので、読むことをお勧めします。 これ は、デフォルトのDockerブリッジネットワークです。 こちら は、ユーザーが作成したブリッジネットワーク用です。
Docker for Mac、Docker Machine、またはDocker for Windowsを使用している場合、Docker Hostは実際にはあなたのマシン上で動作するVMであり、物理的なボックスそのものではないことに留意する必要があります。DNS解決への変更をコンテナに反映させるには、コンテナを再起動する必要があります。
もちろん、デフォルトの設定をすべてオーバーライドするには
docker-compose
. DNSサーバ、DNS検索オプションなどを明示的に設定するための完全なオプションがあります。例として
version: 2
services:
application:
dns:
- 8.8.8.8
- 4.4.4.4
- 192.168.9.45
これらの機能に関するドキュメントはこちら ここで .
関連
-
[解決済み] pingレスポンス "Request timed out." vs "Destination Host unreachable" (リクエストがタイムアウトしました)。
-
[解決済み] localhost:8080とはどういう意味ですか? [クローズド]です。
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Docker-Composeを使用して、複数のコマンドを実行する方法
-
[解決済み】docker-composeで単一のコンテナを再起動する方法
-
[解決済み】TCPの代わりにUDPを使用することが適切なのはどんな場合ですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オクテット・ストリングス それは何ですか?
-
[解決済み] SNMPのpingとは何ですか?
-
[解決済み] パイプとソケットの違いは何ですか?
-
[解決済み] カーネルソースプロジェクトのinclude/uapiに含まれるもの
-
[解決済み] TCPのフロー制御と輻輳制御の違いは何ですか?
-
[解決済み] pingレスポンス "Request timed out." vs "Destination Host unreachable" (リクエストがタイムアウトしました)。
-
[解決済み] localhost:8080とはどういう意味ですか? [クローズド]です。
-
[解決済み] RPCサーバーが使用できません。(HRESULT: 0x800706BA による例外)。
-
[解決済み】TCPの代わりにUDPを使用することが適切なのはどんな場合ですか?[クローズド]
-
[解決済み】遅いネットワーク接続をシミュレートするネットワークツール【終了しました