/etc/resolv.conf 写着 127.0.0.11 按说 127.任何都是 localhost 吧 但是 ps 查看并没有运行个进程在 53 端口
docker 到底是怎么实现在 127.0.0.11:53 监听 DNS 请求但是进程并不出现在容器里?
![]() |
1
crysislinux 11 天前
docker 会改 iptables ,可以把 53 端口的请求转发到别的端口。当然我并不是说 docker 是这么做的,不过有这种可能性。
|
2
sunny352787 11 天前 ![]() @crysislinux 你还真说对了,实际上确实是通过 iptables 将 127.0.0.11:53 的流量进行了转发,docker 不是在容器里启动的 dns ,而是在 host 上启动了一个 dns 服务,然后映射到容器内一个随机端口,iptables 会将 53 的流量转发到这个随机端口,也就将 dns 请求交给 host 上的 docker dns 服务去处理了
|
3
sunny352787 11 天前
@julyclyde 你在容器里看一下 iptables 的转发规则就能看到 127.0.0.11:53 有进行流量转发
|
4
julyclyde OP @sunny352787 内部不能看 iptables 吧。需要 privileged
|
![]() |
5
Yousri 9 天前
这个应该是统一 Docker daemon 处理的吧,并不是每个容器自身都各自 dns 服务吧~而是统一在 docker daemon 实现的 dns 内部解析(结合本身内部注册服务)及转发外部域查询处理
|