Docker daemon及容器实例的DNS配置详解

Linux系统中,DNS解析器是一组C库的进程,用以访问DNS服务器。DNS解析器通过/etc/resolv.conf配置文件给出要访问的DNS服务器,配置文件修改后立刻生效,但系统重启后/etc/resolv.conf配置文件的内容回滚到初始状态。

1. Docker daemon的DNS配置

Docker daemon的配置有两种方式,一种是通过/etc/docker/daemon.json文件,另一种是通过dockerd的命令参数。

对于Docker daemon的DNS配置,二选一,不能同时以两种方式进行同一参数的配置,否则dockerd启动会失败。
1) 配置/etc/docker/daemon.json文件的DNS属性
{
    "dns": ["8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", "2001:4860:4860::8844"],
    "dns-opts": ["debug"],
    "dns-search": ["example.com"],
    ...
}
2) dockerd命令的DNS参数

dockerd --dns 8.8.8.8 --dns-opt debug --dns-search example.com

2. docker run命令的DNS参数

在启动Docker容器实例的docker run命令中,也可以通过如下命令参数,为要创建的容器实例配置专用的DNS参数。

  • --dns
  • --dns-option或--dns-opt
  • --dns-search

docker run -d --dns 8.8.8.8 --dns-opt debug --dns-search example.com --name myContainer myImage:latest

3. Docker容器实例中解析DNS的顺序

1) 首先,查找Docker daemon内置的DNS服务器127.0.0.11

2) 其次,查找docker run创建容器实例时通过--dns参数设置的DNS服务器

3) 再次,查找Docker daemon通过--dns参数,或/etc/docker/daemon.json文件设置的DNS服务器

4) 又次,查找Docker宿主机上/etc/resolv.conf文件中配置的DNS服务器

5) 最后,查找Google的DNS服务器,如8.8.8.8和8.8.4.4,2001:4860:4860::8888和2001:4860:4860::8844

 

参考链接:

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/configure-dns/

https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/

你可能感兴趣的:(Docker)