DockerのDNSについて

はじめに

本ブログ以下の記事でubuntuにおいてdnsの設定がそのままではコンテナ内部から名前解決ができないためホストOS側のDNSを書き換える操作をしました.

しかし,最近になってせっかくコンテナを使っているのに,コンテナを使うためにホストOS側の設定を変更するのはコンテナの旨味が薄れている気がしたので,見直すことにしました. その際の自分用メモです.

tenzen.hatenablog.com

DockerにおけるDNS

Dockerの初期設定において,コンテナ内で使用するDNSはホストOSの設定がコピーされます. Ubuntu 16.04LTSでは初期設定でDNSlocalhostに設定されているのですが,コンテナ内でlocalhostに問い合わせても名前解決できないことでWAN側のネットワークとうまく通信できないことが問題です.

そこで以前は,ホストOS側でlocalhost以外のDNSを指定してあげていました.

DNSの設定

DockerにはオプションでDNSを指定して起動するコマンドも存在しますが,毎回毎回そのオプションを指定して起動するのは面倒なため, 「/etc/docker/daemon.json」に直接DNSの設定を書き込んでオプションを使用せずに済むようにしました.

以下のように「/etc/docker/daemon.json」を書き換えてください.すでに他の記述がある場合通常のjsonの記述方法にしたがって追加してください. 今回は大学で使用しているマシンで書き換えたため大学のdnsを指定しました.

$ cat /etc/docker/daemon.json
{
    "dns":["xxx.xxx.xxx.xxx"]
}
$

おわりに

WindowsMacのDocker for Desktopを使用しているとこのようなことに悩まずすんなりDockerライフを送ることができるのですが,それ以外の場合この問題に遭遇することも多いと思います.(そもそもlinuxユーザがそんなに多くない気もするが)

P.S. 今月は忙しくてあまり記事をかけなかったが,来月も忙しくなりそうで一本もかけないかもしれない.