julyclyde
V2EX  ›  Docker

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

  •  
  •   julyclyde ·
    julyclyde · Jul 22, 2025 · 2313 views
    This topic created in 306 days ago, the information mentioned may be changed or developed.

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

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

    7 replies    2025-07-25 09:49:43 +08:00
    crysislinux
        1
    crysislinux  
       Jul 22, 2025
    docker 会改 iptables ,可以把 53 端口的请求转发到别的端口。当然我并不是说 docker 是这么做的,不过有这种可能性。
    sunny352787
        2
    sunny352787  
       Jul 22, 2025   ❤️ 1
    @crysislinux 你还真说对了,实际上确实是通过 iptables 将 127.0.0.11:53 的流量进行了转发,docker 不是在容器里启动的 dns ,而是在 host 上启动了一个 dns 服务,然后映射到容器内一个随机端口,iptables 会将 53 的流量转发到这个随机端口,也就将 dns 请求交给 host 上的 docker dns 服务去处理了
    sunny352787
        3
    sunny352787  
       Jul 22, 2025
    @julyclyde 你在容器里看一下 iptables 的转发规则就能看到 127.0.0.11:53 有进行流量转发
    julyclyde
        4
    julyclyde  
    OP
       Jul 23, 2025
    @sunny352787 内部不能看 iptables 吧。需要 privileged
    Yousri
        5
    Yousri  
       Jul 24, 2025
    这个应该是统一 Docker daemon 处理的吧,并不是每个容器自身都各自 dns 服务吧~而是统一在 docker daemon 实现的 dns 内部解析(结合本身内部注册服务)及转发外部域查询处理
    julyclyde
        6
    julyclyde  
    OP
       Jul 24, 2025
    @Yousri docker daemon 并不会“神奇的”生效
    而是通过一定机制生效的
    我问的就是这个机制
    Yousri
        7
    Yousri  
       Jul 25, 2025
    @julyclyde 那估计得直接翻阅下 moby 项目本身关于 daemon 模块中有关 libnetwork 和 docker-proxy 的源码哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2117 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 00:01 · PVG 08:01 · LAX 17:01 · JFK 20:01
    ♥ Do have faith in what you're doing.