执行docker-compose up时出现连接超时错误,防火墙环境下如何排查?
问题分析与解决方案
错误核心原因
你遇到的错误是Docker Daemon无法通过DNS解析Docker Hub的镜像仓库域名,导致无法拉取mysql:8.0.23镜像,具体表现为DNS请求超时(read udp ... i/o timeout)。你的docker-compose.yml配置本身没有问题,问题出在镜像拉取的网络环节。
可能的解决步骤
1. 手动配置Docker的DNS服务器
Docker默认使用主机的DNS配置,如果主机DNS不可用,可直接给Docker指定公共DNS:
- Linux:编辑
/etc/docker/daemon.json(没有则新建),添加内容:
然后重启Docker服务:{ "dns": ["8.8.8.8", "114.114.114.114"] }sudo systemctl restart docker - Windows/Mac:打开Docker Desktop设置,找到Docker Engine选项卡,添加上述DNS配置后点击"Apply & Restart"。
2. 检查主机的DNS解析能力
在主机终端执行以下命令,测试是否能正常解析Docker Hub域名:
nslookup registry-1.docker.io
如果同样出现超时,说明主机本身的DNS配置有问题,需要修改主机的DNS服务器(比如在网络设置里换成8.8.8.8)。
3. 排查防火墙/代理的隐性影响
即使你认为不是防火墙问题,仍需确认:
- 防火墙是否拦截了UDP 53端口的DNS请求,或者拦截了Docker Hub的IP段;
- 如果主机使用了代理,需确保Docker也配置了对应代理:在
daemon.json中添加代理配置(替换为你的代理地址):
配置后重启Docker。{ "proxies": { "default": { "httpProxy": "http://your-proxy-ip:port", "httpsProxy": "http://your-proxy-ip:port" } } }
4. 重置本地网络环境
- 重启路由器,清空DNS缓存;
- 临时切换网络(比如使用手机热点),测试是否能正常拉取镜像,排除内网环境的问题。
内容的提问来源于stack exchange,提问作者Deep Kiran
相关产品推荐
相关产品推荐

