2016-12-12 7 views
2

私はドッカーコンテナーで実行する必要があり、ホスト名で他のドッカーコンテナーと対話する必要のある小さなアプリケーションを作成しています。golang net.LookupHost in docker container返信127.0.53.53

私はnet.LookupHostを使用して、サーバーのIPアドレスを取得しようとしていますが、私はいつも奇妙なことは、私はから掘るようにDNSツールを使用して右のIPアドレスを取得することができるということです127.0.53.53

を取得しています同じコンテナ。 goプログラムからはうまくいきません。

以下は私のコードからIPアドレスを取得したセクションです。

zk_server_ips, err := net.LookupHost("zookeeper") 
addrs, err := net.LookupIP("testserver") 
if err != nil { 
    fmt.Fprintf(w, "Failed to lookup ip address for testserver") 
    return 
} 
for _, addr := range addrs { 
if ipv4 := addr.To4(); ipv4 != nil { 
    fmt.Fprintf(w, "IPv4: %s", ipv4) 
} 

私は127.0.53.53は、ICANNは、DSNのセットアップに問題があることを私に言っている方法ですが、それは、外出先から掘るドリルでの作業とされていない理由を私は知らないことをたくさん読んでいますコード。 !

また、ホスト名を解決するためのドッカーコンテナを設定する正しい方法は何ですか?

コンテナはAlpine Linuxイメージ上で実行されています。以下は

コンテナ内の私はresolv.confです:

search fritz.box 
nameserver 127.0.0.11 
options ndots:0 
+0

あなたのresolv.confはどのように見えますか?あなたは裸のホスト名を要求しているので、リゾルバがあなたのドメイン名を取得している可能性がありますか? – Doon

+0

検索fritz.box ネームサーバー127.0.0.11 オプションndots:0 – silentnights

+1

powのようなものがインストールされていますか?またはドッカーの傍受をします。 – Doon

答えて

0

.box is a real TLD.社内システムのためにそれを使用しないでください。

ローカルシステムにホスト名を与える必要がある場合は、この目的のために予約されている.local TLDを使用してください。

+0

私の遅い応答に申し訳ありません。 問題はルータdhcpサーバによって設定されているためです。ルータのインターフェイスにどこにもないため、変更する方法を見つける必要があります。 しかし、なぜそれはDNSツールではなく、gethostbynameからではないのですか? – silentnights

1

Telegrafを使用しているときに同じ問題が発生しました。

残念ながら私は、根本的な原因を知らないが、私はdocker runを使用するときに--dns-search=.を設定することによって、またはドッカー作曲v1のYAMLファイルにdns_search: .を設定することで問題を回避することができました:

telegraf: 
    image: telegraf:1.2.1-alpine 
    dns_search: . 
    volumes: 
    - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro 

Docker DNS documentationを参照してください。 --dns-searchスイッチの詳細については、