gpt4 book ai didi

docker - Docker 容器中的 DNS 服务器

转载 作者:行者123 更新时间:2023-12-02 18:55:36 41 4
gpt4 key购买 nike

我在 docker 容器中有未绑定(bind)的 DNS 服务器。此容器在 docker 守护程序中具有以下端口映射:
0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp

docker 主机的 IP 地址为 192.168.24.5,本地 DHCP 服务器将主机的 IP 宣布为本地 DNS 服务器。这在我的本地网络上运行良好。
主机本身通过 IP 192.168.24.5 使用这个 DNS 服务器。那是放在主机的/etc/resolv.conf 中的地址。 (我知道如果有 127.0.0.1 作为名称服务器地址,它不适用于 docker。)

我还有其他一些 docker 容器,它们也应该使用这个 DNS 服务器。关键是,他们没有。

实际发生的是这样的:
在一个随机容器中,我可以 ping 主机的地址以及未绑定(bind)容器的地址。但是当我在容器内使用 dig 时,我得到了以下结果:
# dig @172.17.0.6 ...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 22778
;; flags: qr rd ad; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
# dig @192.168.24.5 ...
;; reply from unexpected source: 172.17.0.1#53, expected 192.168.24.5#53

这看起来像一些内部 DNS 服务器拦截查询并尝试回答它们。如果它会使用主机的 DNS 服务器来获得答案,那会很好,但事实并非如此。 DNS 在容器中根本不起作用。

我做错了还是 docker 做了不应该做的事情?

最佳答案

问题是用于 DNS 服务器的 iptables UDP nat。您正在查询主机 IP,而它是 docker bridge 网络的响应。

至少通过以下方式解决此问题:

  • 如果可能,使用容器 IP(DNS 容器)作为 DNS 解析器。

  • 或者
  • 提供--net=host到您的 DNS 服务器容器并完全删除端口映射。然后主机 IP DNS 将按预期工作。
  • 关于docker - Docker 容器中的 DNS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937496/

    41 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com