You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器无法解析宿主机可正常解析的特定互联网主机

排查思路

针对你遇到的容器无法解析特定域名(flora.com)的问题,按以下步骤逐步排查:

1. 验证容器直接使用宿主机DNS是否能解析

在容器内执行以下命令,跳过Docker内置DNS,直接用宿主机的systemd-resolved地址解析目标域名:

dig flora.com @127.0.0.53
# 或用nslookup
nslookup flora.com 127.0.0.53
  • 如果能正常解析:问题出在Docker内置DNS(127.0.0.11)的转发逻辑上
  • 如果仍无法解析:检查容器到宿主机127.0.0.53:53端口的连通性,比如用telnet 127.0.0.53 53或nc -zv 127.0.0.53 53

2. 查看Docker daemon的DNS相关日志

通过系统日志查看Docker服务的DNS解析记录,找是否有针对flora.com的报错:

journalctl -u docker.service | grep -i "flora.com\|dns"

重点看是否有转发失败、超时或服务器拒绝的日志信息。

3. 检查宿主机systemd-resolved的拆分DNS配置

宿主机使用systemd-resolved(127.0.0.53),可能针对flora.com配置了拆分DNS(Split DNS),导致只有宿主机能解析,而Docker DNS未同步该规则:

  • 先查看宿主机对该域名的解析详情:
    resolvectl query flora.com
    
    输出中会显示使用的DNS服务器地址
  • 再查看resolved的全局/域名特定DNS配置:
    resolvectl dns
    resolvectl domain
    
    如果flora.com被绑定到了特定的DNS服务器,Docker默认不会继承这个规则,需要手动配置。

4. 手动指定容器的DNS服务器测试

在你的docker-compose.yml中给目标服务添加DNS配置,强制使用宿主机resolved地址或公共DNS:

services:
  # 替换为你的服务名称
  your-service-name:
    dns:
      - 127.0.0.53
      - 8.8.8.8

重启容器后测试解析,如果能正常工作,说明Docker默认的DNS转发未正确获取宿主机的resolved规则。

5. 检查自定义网络的DNS配置

查看你的dev-vlt-console网络是否有强制设置的DNS选项:

docker network inspect dev-vlt-console

查看输出中Options字段是否存在com.docker.network.driver.opts.dns之类的配置,如果有,确认该DNS服务器是否能解析flora.com。

6. 测试TCP方式的DNS解析

部分网络环境会拦截UDP端口53的请求,导致DNS解析失败,试试在容器内用TCP模式解析:

dig +tcp flora.com

如果TCP能解析,说明UDP请求被拦截,需要检查宿主机或网络的防火墙规则。

内容的提问来源于stack exchange,提问作者bnoeafk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:54:27