DockerでDNSにアクセスできない時の対処法

最近Dockerを触っています。Dockerを使うと今までChefとかで設定していたサーバを生のシェルスクリプトを使って設定できます。しかも起動は一瞬だしこれは一度触ってみないと凄さが分からないのではないかと。

とりあえず試したい方はubuntu13.04をVirtualBoxにインストールして下記のコマンドをたたきましょう

curl http://get.docker.io | sudo sh -x

これで簡単にDockerはインストールできます。あとの細かい設定は仮想環境構築に docker を使う - apatheia.infoを参照してもらうとして、今回の本題はいろいろ使っていると、DockerのバグなのかDNSがからで仮想環境が立ち上がってしまうことがあります。そういうときは下記のコマンドをたたきます。

sudo docker run -dns=8.8.8.8 -t -i base /bin/bash

ミソは-dnsオプションで、これを指定すると立ち上がった仮想環境の/etc/resolv.confは8.8.8.8を参照するようになります。これで万事解決かと思ったら大間違いでした。

docker buildで-dnsオプションがない

そうなんです、docker buildには-dnsオプションがありません。すごく困っていたんですが、docker daemonのオプションに-dnsオプションがあることを発見。これを指定すればデフォルトで起動するdockerの仮想環境のDNSを変更できます。

ubuntuは/etc/init/docker.confに起動スクリプトがあるので、これを編集して下記のようにします。

description "Docker daemon"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
respawn
exec env LANG="en_US.UTF-8" /usr/local/bin/docker -d -dns=8.8.8.8

あとはdockerdを再起動するだけ。

sudo stop dockerd # restartだとdocker.confが読み込まれない
sudo start dockerd

これで万事解決!