2016-10-08 14 views
0

DNSサーバーがドッキング・コンテナーにバインドされています。このコンテナは、ドッカーのdeamonに次のポートマッピングを持っています。 0.0.0.0:53->53/tcp、0.0.0.0:53->53/udpDocker Container内のDNSサーバー

ドッキングホストは、IPアドレス192.168.24.5とローカルDHCPサーバーは、ホストのIPをローカルDNSサーバーとしてアナウンスします。これは私のローカルネットワーク上でうまく動作します。 ホスト自体がこのDNSサーバーをIP 192.168.24.5で使用します。それはホストの/etc/resolv.confに置かれるアドレスです。 (ネームサーバーアドレスとして127.0.0.1があった場合、ドッカーとはうまく動作しません)

私は他のドッカーコンテナを持っていて、このDNSサーバーも使用することになっています。ポイントは、そうではありません。

これは実際には何ですか: ランダムなコンテナでホストのアドレスとバインドされていないコンテナのアドレスをpingできます。私はコンテナ内DIGを使用する場合でも、私はこれらの結果を得る:これはいくつかの内部DNSサーバのように見えます

# dig @172.17.0.6 ... ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 22778 ;; flags: qr rd ad; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available

# dig @192.168.24.5 ... ;; reply from unexpected source: 172.17.0.1#53, expected 192.168.24.5#53

がクエリを傍受し、それらに答えることをしようとします。答えを得るためにホストのDNSサーバーを使用するのであれば問題ありませんが、そうではありません。 DNSはコンテナ内ではまったく動作しません。

私は間違っていますか、ドッカーは何かをしていませんか?

+0

コンテナの/etc/resolv.confに正しいネームサーバー192.168.24.5が表示されます。しかし、コンテナ内からそれを聞くことができないときは、ほとんど役に立たないでしょう。 – felix

答えて

2

問題は、DNSサーバーのiptables UDP natです。ドッキング・ブリッジ・ネットワークの応答である間に、ホストIPに照会しています。少なくともやり方にしてこの問題を解決するには

  • 使用コンテナのIP(DNSコンテナ)DNSリゾルバとして、可能であれば。

または

  • DNSサーバコンテナに--net=hostを提供し、完全にポートマッピングを削除します。その後、ホストIP DNSは期待どおりに動作します。
+0

ありがとうございました!私は両方の方法を試みた。 1.ホストのネームサーバとしてコンテナIP(172.17.0.6)を設定しました。この変更は、コンテナ内の/etc/resolv.confに反映されます。しかし、この方法ではホストまたはコンテナで名前解決が機能しません。 2.この解決策は、ドッキングのアイデアに対して少しです。しかし、問題は、どちらも(他のコンテナ内で)うまくいかないことです。ホストのネットワークスタックを使用するか、またはポート53をマッピングするかの違いはないようです。 iptablesがDNSクエリで正確に何を行うのか、またはこの問題についてのドキュメントを指摘できますか? – felix

+0

それは奇妙です、私は実際に両方の方法を試して、彼らは動作します! IPtablesはホストIPへのリクエストをコンテナに転送します。そのため、リゾルバからそのエラーが発生します。 – Boynux

+0

ホストネットワーキングのようなドッカーのさまざまなネットワーク機能を使うことは、システムをドッキングすることと反対ではないと思います。さまざまなユースケース(NSのような)では、それを行う必要があります。 – Boynux

関連する問題