docker compose 那个内部 DNS 到底是怎么工作的

13 天前
 julyclyde

/etc/resolv.conf 写着 127.0.0.11 按说 127.任何都是 localhost 吧 但是 ps 查看并没有运行个进程在 53 端口

docker 到底是怎么实现在 127.0.0.11:53 监听 DNS 请求但是进程并不出现在容器里?

859 次点击
所在节点    Docker
7 条回复
crysislinux
13 天前
docker 会改 iptables ,可以把 53 端口的请求转发到别的端口。当然我并不是说 docker 是这么做的,不过有这种可能性。
sunny352787
13 天前
@crysislinux 你还真说对了,实际上确实是通过 iptables 将 127.0.0.11:53 的流量进行了转发,docker 不是在容器里启动的 dns ,而是在 host 上启动了一个 dns 服务,然后映射到容器内一个随机端口,iptables 会将 53 的流量转发到这个随机端口,也就将 dns 请求交给 host 上的 docker dns 服务去处理了
sunny352787
13 天前
@julyclyde 你在容器里看一下 iptables 的转发规则就能看到 127.0.0.11:53 有进行流量转发
julyclyde
13 天前
@sunny352787 内部不能看 iptables 吧。需要 privileged
Yousri
11 天前
这个应该是统一 Docker daemon 处理的吧,并不是每个容器自身都各自 dns 服务吧~而是统一在 docker daemon 实现的 dns 内部解析(结合本身内部注册服务)及转发外部域查询处理
julyclyde
11 天前
@Yousri docker daemon 并不会“神奇的”生效
而是通过一定机制生效的
我问的就是这个机制
Yousri
11 天前
@julyclyde 那估计得直接翻阅下 moby 项目本身关于 daemon 模块中有关 libnetwork 和 docker-proxy 的源码哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1146967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX