Dockerのデーモン設定ファイルでコンテナのデフォルト/etc/resolv.conf設定

概要

Dockerコンテナの/etc/resolv.confはDockerホストのファイルがそのまま引き継がれる。
DockerホストとDockerコンテナで名前解決の設定を変更したい場合はdocker runのときに--dnsオプションを指定することで個別に変更が出来る。

とはいえ毎回docker runの度にオプション指定は面倒、しかしDockerホストの/etc/resolv.confは変更したくない。。。

そういった場合は/etc/docker/daemon.jsonに事前に設定を入れておくことで
Dockerホストの/etc/resolv.confを変更することなくそして--dnsオプションを指定する必要がなくなる。

設定

/etc/docker/daemon.json
{
  "dns": [
    "10.0.0.1", "10.0.0.2", "10.0.0.3"
  ],
  "dns-opts": [
    "timeout:1"
  ]
}

と書いてデーモンを再起動すると
各コンテナの/etc/resolv.confのデフォルトが

search example.com
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
options timeout:1

になる。

search example.comは指定していないのでデフォルトのDockerホストの/etc/resolv.confから引き継がれてきた。

注意

jsonファイル中のdns-optsjsonファイルではdns-optsだがdocker run時のオプションではdns-optなので注意