Docker 嵌入式 DNS 服务器未按预期工作
Docker Embedded DNS Server not working as expected
在docker群模式下,我们是运行 2个容器,比如container1和container2,并使其加入同一个overlay网络。
容器 1 无法解析容器 2 的主机,如果未设置外部 dns,则会出现超时错误。
我的问题是为什么需要外部 DNS,因为 docker 的嵌入式 DNS 应该能够解析其他容器的 IP。
经过一些调试和检查 docker 守护程序日志后,我发现当 container1 尝试访问 container2 时,它为 container2 正确获取了 IP,但是 它以某种方式反转了 IP 并尝试解析再次 未设置外部 DNS 超时,它会尝试连接到 google DNS。
以下是容器 1 尝试访问容器 2 时 docker 守护程序附加的日志:-
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.762489062-04:00" level=debug msg="Name To resolve: container2."
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.762587838-04:00" level=debug msg="[resolver] lookup for container2.: IP [10.0.1.15]"
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.799601523-04:00" level=debug msg="IP To resolve 15.1.0.10"
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.799930743-04:00" level=debug msg="[resolver] query 15.1.0.10.in-addr.arpa. (PTR) from 172.18.0.8:43634, forwarding to udp:8.8.8.8"
May 10 08:18:23 machinename dockerd[7426]: time="2019-05-10T08:18:23.800300048-04:00" level=debug msg="[resolver] read from DNS server failed, read udp 172.18.0.8:43634->8.8.8.8:53: i/o timeout"
May 10 08:18:23 machinename dockerd[7426]: time="2019-05-10T08:18:23.800693058-04:00" level=debug msg="[resolver] query 15.1.0.10.in-addr.arpa. (PTR) from 172.18.0.8:36077, forwarding to udp:8.8.4.4"
May 10 08:18:27 machinename dockerd[7426]: time="2019-05-10T08:18:27.800992754-04:00" level=debug msg="[resolver] read from DNS server failed, read udp 172.18.0.8:36077->8.8.4.4:53: i/o timeout"
正如您在上面的日志中看到的那样,它获得了 container2 的 IP 10.0.1.15,但在下一行中它试图解析 15.1.0.10,正好是 IP 的反向。
有什么解决这个问题的建议吗?
它似乎是通过反向 DNS 解析的,并且 ip 以相反的顺序显示,如下所示 post:-
https://github.com/moby/moby/issues/20847
如果您有其他原因,请回复
在docker群模式下,我们是运行 2个容器,比如container1和container2,并使其加入同一个overlay网络。
容器 1 无法解析容器 2 的主机,如果未设置外部 dns,则会出现超时错误。
我的问题是为什么需要外部 DNS,因为 docker 的嵌入式 DNS 应该能够解析其他容器的 IP。
经过一些调试和检查 docker 守护程序日志后,我发现当 container1 尝试访问 container2 时,它为 container2 正确获取了 IP,但是 它以某种方式反转了 IP 并尝试解析再次 未设置外部 DNS 超时,它会尝试连接到 google DNS。
以下是容器 1 尝试访问容器 2 时 docker 守护程序附加的日志:-
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.762489062-04:00" level=debug msg="Name To resolve: container2."
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.762587838-04:00" level=debug msg="[resolver] lookup for container2.: IP [10.0.1.15]"
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.799601523-04:00" level=debug msg="IP To resolve 15.1.0.10"
May 10 08:18:19 machinename dockerd[7426]: time="2019-05-10T08:18:19.799930743-04:00" level=debug msg="[resolver] query 15.1.0.10.in-addr.arpa. (PTR) from 172.18.0.8:43634, forwarding to udp:8.8.8.8"
May 10 08:18:23 machinename dockerd[7426]: time="2019-05-10T08:18:23.800300048-04:00" level=debug msg="[resolver] read from DNS server failed, read udp 172.18.0.8:43634->8.8.8.8:53: i/o timeout"
May 10 08:18:23 machinename dockerd[7426]: time="2019-05-10T08:18:23.800693058-04:00" level=debug msg="[resolver] query 15.1.0.10.in-addr.arpa. (PTR) from 172.18.0.8:36077, forwarding to udp:8.8.4.4"
May 10 08:18:27 machinename dockerd[7426]: time="2019-05-10T08:18:27.800992754-04:00" level=debug msg="[resolver] read from DNS server failed, read udp 172.18.0.8:36077->8.8.4.4:53: i/o timeout"
正如您在上面的日志中看到的那样,它获得了 container2 的 IP 10.0.1.15,但在下一行中它试图解析 15.1.0.10,正好是 IP 的反向。
有什么解决这个问题的建议吗?
它似乎是通过反向 DNS 解析的,并且 ip 以相反的顺序显示,如下所示 post:- https://github.com/moby/moby/issues/20847 如果您有其他原因,请回复