どうも、Docker 再履修中のかっぱ@inokara)です。こんばんわ。

はじめに

とあるきっかけから InfluxDB クラスタ化を Docker で試そうと思って /etc/hosts を弄ろうとしたら…

172.17.0.3      fab3f9254ad9
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
~
"/etc/hosts" [readonly] 7L, 174C

readonly が辛いです…。

さて、どうしたもんだかと思ったら…


dnsmasq と –dns オプションで何とかする

参考

結局 dnsmasq をセットアップ

上記の参考記事のままです。

まずは dnsmasq をインストールしましょう。
さらに bind-utils は dig や host コマンドを含みます。

yum install dnsmasq bind-utils -y

dnsmasq.conf の設定をしましょう。

cat << EOT >> /etc/dnsmasq.conf
listen-address=127.0.0.1
resolv-file=/etc/resolv.dnsmasq.conf
conf-dir=/etc/dnsmasq.d
user=root
EOT

次に dnsmasq で名前解決させたいレコードを設定しましょう。地味にハマってしまいましたが、素の状態だと host 名だけではなくドメインまで含めた FQDN での設定が必要でした。

cat << EOT >> /etc/dnsmasq.d/inokara.com
address="/fab3f9254ad9/127.0.0.1"
address="/782f01b833c0.inokara.com/172.17.0.2"
EOT

そして…dnsmasq で管理出来ないドメインの解決に利用する DNS サーバーの設定をしましょう。(要は resolv.conf の設定をしましょう。)

cat << EOT >> /etc/resolv.dnsmasq.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
EOT

各々の設定が終わったら dnsmasq を起動しましょう。

/etc/init.d/dnsmasq start

確認

まずは dnsmasq をセットアップしたコンテナのイメージを取りましょう。

docker commit ${container} ${repository}

取得イメージから以下のようにコンテナを起動しましょう。

docker run -t -i --dns 127.0.0.1 ${repository}

キモは --dns オプションです。以下のように [] 内に配列として複数 DNS サーバーを設定出来るようですね。

  --dns=[]                   Set custom dns servers

名前解決も試してみましょう。

bash-4.1# host yahoo.com
yahoo.com has address 98.138.253.109
yahoo.com has address 206.190.36.45
yahoo.com has address 98.139.183.24
yahoo.com mail is handled by 1 mta5.am0.yahoodns.net.
yahoo.com mail is handled by 1 mta6.am0.yahoodns.net.
yahoo.com mail is handled by 1 mta7.am0.yahoodns.net.

dnsmasq に登録しているレコードにも問い合わせてみます。

bash-4.1# cat /etc/dnsmasq.d/inokara.com
address="/fab3f9254ad9/127.0.0.1"
address="/782f01b833c0.inokara.com/172.17.0.2"
bash-4.1# host 782f01b833c0.inokara.com
782f01b833c0.inokara.com has address 172.17.0.2
bash-4.1#

最後に

はー、やれやれです。
これで InfluxDB のクラスタ検証を Docker で試せそうです…。

別に Docker でなくてもよくね?というツッコミはご勘弁を…。

元記事はこちらです。
Docker コンテナで /etc/hosts がイジれなくて残念だったのでメモ