Dockerコンテナ 上の名前解決とホストマシンの Windows の hosts

とある試験で Dockerコンテナ からのみ特別に名前解決したい、というケースが生じました。

そこでホストマシンの Windows の hosts が使えないか検証したのでメモ。

検証

# yum install -y bind-utils

まず今回検証したい Dockerコンテナ はデフォルトだと nslookup コマンドが入っていないのでインストール (bind-utils の中に含まれている)。

#192.0.2.1    hoge.example1.jp

続いてホストマシンの Windows の hosts を上述のように記述。あえてコメントアウトしてあります。

なお、 hoge.example1.jp は公開 DNSサーバ にはレコードが存在しないドメインだとします。

# nslookup
> hoge.example1.jp
Server:         127.0.0.11
Address:        127.0.0.11#53

** server can't find hoge.example1.jp: NXDOMAIN

この状態で Dockerコンテナ 上から nslookup 。上述の通り DNSサーバ にレコードが存在しない前提なので、名前解決できません。

# nslookup
> example1.jp
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   example1.jp
Address: 192.0.2.11

逆に、 DNSサーバ にレコードが存在する example1.jp は名前解決できます。想定通りですね。

192.0.2.1    hoge.example1.jp

続いてホストマシンの Windows の hosts に記述をした場合です。

# nslookup
> hoge.example1.jp
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   hoge.example1.jp
Address: 192.0.2.1

名前解決できました。このことから、 Dockerコンテナ はホストマシンの hosts を参照することが分かりました。

これで検証が進められます。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。