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规则即可:
- 单容器启动时加
--add-host参数,示例:
docker run -d --add-host <目标域名>:<对应的映射IP> <你的Flask镜像名>
- 若使用docker-compose部署,在对应服务下添加
extra_hosts配置:
services: flask-app: image: <你的Flask镜像名> extra_hosts: - "<目标域名>:<对应的映射IP>"
场景2:Docker默认DNS解析异常
- 临时验证:启动测试容器指定公共DNS测试解析:
docker run --rm --dns 8.8.8.8 --dns 114.114.114.114 busybox nslookup <目标域名>
- 永久生效:编辑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:
- 编辑WSL内
/etc/wsl.conf,添加如下内容:
[network] generateResolvConf = false
- 在Windows终端执行
wsl --shutdown关闭WSL,重新打开WSL后手动编辑/etc/resolv.conf写入DNS配置:
nameserver 8.8.8.8 nameserver 114.114.114.114
- 执行
sudo service docker restart重启Docker服务即可。
内容的提问来源于stack exchange,提问作者DaiShogun
相关产品推荐
相关产品推荐

