どうも、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 オプションで何とかする
参考
- Dockerで/etc/hostsファイルが操作出来ない対策
- Unable to modify /etc/hosts file in a container
- Allow customization of /etc/hosts, /etc/resolv.conf, etc. in containers
結局 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 がイジれなくて残念だったのでメモ」