使用 dnsmasq 解析 docker 容器的 DNS

使用 dnsmasq 解析 docker 容器的 DNS

我有一个域名系统当前绑定的服务127.0.0.1指向我的 minikube 实例,如下所示:

address=/.k8s.local/192.168.39.184

我想运行使用我指定的 DNS 与 minikube 实例通信的 docker 容器。
当我使用 docker 设置容器的 DNS 时,docker run --dns 127.0.0.1 ...会输出以下消息:WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
如果我像这样使用主机的网络,docker run --net host --dns 127.0.0.1 ...一切都会按预期运行。
如何配置 docker 桥接器以使用我的本地 dnsmasq 服务解析 DNS?

答案1

你可以使用主机的本地 DNS 解析器(例如dnsmasq),如果你的 Docker 容器位于用户定义网络。在这种情况下,容器/etc/resolv.conf将拥有名称服务器127.0.0.11(即 Docker 的嵌入式 DNS 服务器),能够正确转发DNS请求到主机的环回地址。

$ cat /etc/resolv.conf
nameserver 127.0.0.1
$ docker run --rm alpine cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
$ docker network create demo
557079c79ddf6be7d6def935fa0c1c3c8290a0db4649c4679b84f6363e3dd9a0
$ docker run --rm --net demo alpine cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0    

相关内容