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

Docker容器网络异常:WSL2环境下请求外部API报无主机名关联地址错误

问题根因说明

该错误为Docker容器内对目标域名的DNS解析失败,因宿主机、WSL环境可正常访问该站点,且容器可正常请求其他API,可排除容器整体网络连通性问题。

排查步骤
  • 验证容器内解析状态:进入运行中的Flask容器,执行nslookup <你的目标API域名>,同时执行nslookup baidu.com做对比,确认是否仅该域名解析失败。
  • 核对WSL2 DNS配置:查看WSL环境内/etc/resolv.conf内容,确认当前WSL使用的DNS服务器地址是否正常。
  • 核对Docker DNS配置:执行docker info | grep -i dns查看Docker默认使用的DNS服务器,确认是否和WSL环境的DNS配置一致。
  • 检查本地hosts映射规则:确认是否在Windows hosts文件或WSL的/etc/hosts中添加了该目标域名的自定义映射,该类本地映射默认不会同步到Docker容器中,是该场景下的高频诱因。
解决方案

场景1:目标域名配置了本地hosts映射

启动容器时主动注入hosts规则即可:

  1. 单容器启动时加--add-host参数,示例:
docker run -d --add-host <目标域名>:<对应的映射IP> <你的Flask镜像名>
  1. 若使用docker-compose部署,在对应服务下添加extra_hosts配置:
services:
  flask-app:
    image: <你的Flask镜像名>
    extra_hosts:
      - "<目标域名>:<对应的映射IP>"

场景2:Docker默认DNS解析异常

  1. 临时验证:启动测试容器指定公共DNS测试解析:
docker run --rm --dns 8.8.8.8 --dns 114.114.114.114 busybox nslookup <目标域名>
  1. 永久生效:编辑WSL内/etc/docker/daemon.json(无该文件则新建),添加DNS配置:
{
  "dns": ["8.8.8.8", "114.114.114.114", "<WSL环境正常使用的DNS地址>"]
}

配置完成后执行sudo service docker restart重启Docker服务生效。

场景3:WSL2自动生成的DNS配置异常

关闭WSL自动生成resolv.conf的逻辑,手动配置DNS:

  1. 编辑WSL内/etc/wsl.conf,添加如下内容:
[network]
generateResolvConf = false
  1. 在Windows终端执行wsl --shutdown关闭WSL,重新打开WSL后手动编辑/etc/resolv.conf写入DNS配置:
nameserver 8.8.8.8
nameserver 114.114.114.114
  1. 执行sudo service docker restart重启Docker服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:06:04