V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
julyclyde
V2EX  ›  Docker

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

  •  
  •   julyclyde ·
    julyclyde · 11 天前 · 816 次点击

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

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

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