Docker 上的 Bind9 无法在主机上解析

Docker 上的 Bind9 无法在主机上解析

我在本地网络上有一台 PC,它将运行我想要通过 URL 而不是 IP 访问的服务。

我遵循了许多关于如何使用 Bind9(和 dnsmasq)的指南和文章,但总是遇到困难。现在我正在使用 Bind9 和 docker-compose。对 DNS 容器执行 ping 操作会导致出现“请求超时”消息。

配置文件:

./docker-compose.yaml

版本:'3'

services:
  bind9:
    container_name: dns
    image: ubuntu/bind9:latest
    environment:
      - BIND9_USER=root
      - TZ=Europe/Stockholm
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    volumes:
      - ./config:/etc/bind
      - ./cache:/var/cache/bind
      - ./records:/var/lib/bind
    restart: unless-stopped

./config/named.conf

acl internal {
    10.30.0.0/16;
};

options {
    forwarders {
        1.1.1.1;
        1.0.0.1;
    };
    allow-query { internal; };
};

使用 启动容器docker compose up -d,容器启动并且一切正常。Bind9 容器的 IP 是 170.20.0.2。主机 PC 的 IP 是 10.30.20.100。

对主机 PC 执行 ping 操作后,系统会显示以下Request timed out消息。我尝试时nslookup example.com 170.20.0.2也得到了相同的结果Server: Unknown

我是否遗漏了什么……?

答案1

对主机 PC 执行 ping 操作会导致出现请求超时消息。当我尝试 nslookup example.com 170.20.0.2 时,我得到了相同的结果,以及服务器:未知。

Docker 会进行 NAT。这意味着 Docker 容器中使用的 IP 在 Docker 环境之外无法访问。这就是为什么发布端口,使其在 Docker 主机接口上有效可用。对于 DNS,这将是端口 53、TCP 和 UDP。

相关内容