如何设置Docker容器私有DNS转发,实现内部域名解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计705个文字,预计阅读时间需要3分钟。
在Docker容器中,要正确解析私有域名(如`api.internal`、`db.company.local`),同时又能正常访问公共域名(如`google.com`),核心并非单纯修改容器内的DNS设置,而是构建一个具备内部解析+外部转发能力的私有DNS服务。具体步骤如下:
部署一个支持转发的私有 DNS 服务(如 BIND9 或 CoreDNS)
推荐使用轻量、配置清晰的 CoreDNS(官方推荐)或 BIND9(成熟稳定),通过 Docker 容器方式运行:
- 用
docker run启动 CoreDNS 容器,挂载自定义Corefile配置文件 -
Corefile中定义两部分:对内网域名(如company.local)做hosts或file插件直解析;对其他域名启用forward插件,转发到上游 DNS(如114.114.114.114或内网 DNS) - 确保该 DNS 容器监听在宿主机可访问的端口(如
53/udp和53/tcp),并开放防火墙
让容器使用该私有 DNS 服务
容器不直接写死内网 IP 域名,而是统一指向你刚搭好的私有 DNS:
- 启动容器时加
--dns=192.168.1.100(替换为你的私有 DNS 宿主机 IP) - 若使用自定义 Docker 网络(
docker network create),可在创建网络时指定:docker network create --dns 192.168.1.100 mynet,之后连入该网络的容器自动继承 - 避免混用:不要同时在
/etc/docker/daemon.json全局设 DNS 和容器级--dns,优先级可能冲突
验证解析是否按预期工作
进容器后执行以下命令确认行为:
-
cat /etc/resolv.conf→ 检查 nameserver 是否为你私有 DNS 的 IP -
nslookup api.internal→ 应返回你配置的内网 IP(如10.10.20.5) -
nslookup google.com→ 应能成功返回公网 IP,证明转发链路通畅 - 若失败,检查私有 DNS 容器日志(
docker logs coredns),确认是否收到查询、是否触发了转发
补充:配合 DNS 搜索域提升体验
为减少输入完整域名,可加 --dns-search company.local:
- 这样容器内执行
curl api会自动尝试api.company.local - 与私有 DNS 的
company.local区域配置匹配,实现无缝访问 - 多个搜索域可用逗号分隔,或多次使用
--dns-search
本文共计705个文字,预计阅读时间需要3分钟。
在Docker容器中,要正确解析私有域名(如`api.internal`、`db.company.local`),同时又能正常访问公共域名(如`google.com`),核心并非单纯修改容器内的DNS设置,而是构建一个具备内部解析+外部转发能力的私有DNS服务。具体步骤如下:
部署一个支持转发的私有 DNS 服务(如 BIND9 或 CoreDNS)
推荐使用轻量、配置清晰的 CoreDNS(官方推荐)或 BIND9(成熟稳定),通过 Docker 容器方式运行:
- 用
docker run启动 CoreDNS 容器,挂载自定义Corefile配置文件 -
Corefile中定义两部分:对内网域名(如company.local)做hosts或file插件直解析;对其他域名启用forward插件,转发到上游 DNS(如114.114.114.114或内网 DNS) - 确保该 DNS 容器监听在宿主机可访问的端口(如
53/udp和53/tcp),并开放防火墙
让容器使用该私有 DNS 服务
容器不直接写死内网 IP 域名,而是统一指向你刚搭好的私有 DNS:
- 启动容器时加
--dns=192.168.1.100(替换为你的私有 DNS 宿主机 IP) - 若使用自定义 Docker 网络(
docker network create),可在创建网络时指定:docker network create --dns 192.168.1.100 mynet,之后连入该网络的容器自动继承 - 避免混用:不要同时在
/etc/docker/daemon.json全局设 DNS 和容器级--dns,优先级可能冲突
验证解析是否按预期工作
进容器后执行以下命令确认行为:
-
cat /etc/resolv.conf→ 检查 nameserver 是否为你私有 DNS 的 IP -
nslookup api.internal→ 应返回你配置的内网 IP(如10.10.20.5) -
nslookup google.com→ 应能成功返回公网 IP,证明转发链路通畅 - 若失败,检查私有 DNS 容器日志(
docker logs coredns),确认是否收到查询、是否触发了转发
补充:配合 DNS 搜索域提升体验
为减少输入完整域名,可加 --dns-search company.local:
- 这样容器内执行
curl api会自动尝试api.company.local - 与私有 DNS 的
company.local区域配置匹配,实现无缝访问 - 多个搜索域可用逗号分隔,或多次使用
--dns-search

