简单说一下流程吧,不写了。

docker会修改容器里的/etc/resolv.conf文件,把dns服务器设置成127.0.0.11,因为127.0.0.0/8地址都是本机回环地址,所以dns查询的时候实际上是把请求发给了自己。虽然是发给自己,但是还是要走netfilter表的。nat表的output链里把发往127.0.0.11:53的UDP包转到了41741端口

iptables -A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.11:41741

 netstat -anp查看发现是dockerd在监听41741端口,等dns请求又回环到filter表的input链的时候dockerd就接到了这个请求。所以,辗转了半天dns请求最终发给了dockerd进程。dockerd自身处理这些请求,处理不了的应该是要发给宿主机的dns服务器。

 

 

参考:

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

https://www.jianshu.com/p/4433f4c70cf0

https://anoyi.com/p/dba9342071d8

相关文章:

  • 2022-12-23
  • 2021-08-21
  • 2021-11-20
  • 2022-12-23
  • 2023-02-21
  • 2022-03-05
  • 2021-05-07
猜你喜欢
  • 2021-08-27
  • 2021-11-21
  • 2021-08-09
  • 2021-12-22
  • 2021-07-09
相关资源
相似解决方案