Docker Compose无网络访问:构建及请求均超时故障求助
Docker Compose网络异常:镜像拉取正常但构建/容器内请求超时
问题现象
- 镜像拉取无异常,但Dockerfile中执行
RUN pip install pipenv等网络相关命令时,因连接超时构建失败 - 在
docker-compose.yml中添加network: host后,构建可完成,但容器内发送HTTPS请求(如访问google.com)仍超时 - 问题复现于Ubuntu 22、Manjaro 21系统
构建错误日志
=> [6/9] RUN pip install --upgrade pip 85.7s => => # Requirement already satisfied: pip in /usr/local/lib/python3.9/site-packages (22.0.4) => => # WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HT => => # TPSConnection object at 0x7f3f75f13340>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/pip/
容器内请求错误日志
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fccaa7afdc0>: Failed to establish a new connection: [Errno 110] Connection timed out'))
排查与解决步骤
1. 检查并配置Docker DNS
Docker默认使用系统DNS,若系统DNS解析异常会导致容器网络请求失败:
- 查看当前Docker DNS配置:
cat /etc/docker/daemon.json - 若未配置或配置异常,添加公共DNS(如Google或Cloudflare):
创建/修改/etc/docker/daemon.json:{ "dns": ["8.8.8.8", "1.1.1.1"] } - 重启Docker服务:
# Ubuntu systemctl restart docker # Manjaro systemctl restart docker.service
2. 排查防火墙与代理影响
临时关闭防火墙测试:
# Ubuntu ufw disable # Manjaro systemctl stop firewalld关闭后重新执行构建和容器请求,若恢复正常,需调整防火墙规则允许Docker网络通行。
代理配置检查:
若系统使用全局代理,Docker默认不会继承,需在daemon.json中配置代理:{ "proxies": { "default": { "httpProxy": "http://your-proxy-address:port", "httpsProxy": "http://your-proxy-address:port", "noProxy": "localhost,127.0.0.1,172.17.0.0/16" } } }配置后重启Docker,重新构建测试。
3. 排查Docker Bridge网络
默认bridge网络可能存在配置异常,尝试自定义bridge网络:
- 在
docker-compose.yml中添加自定义网络:networks: custom_bridge: driver: bridge ipam: config: - subnet: 172.20.0.0/16 services: your_service: # 其他配置 networks: - custom_bridge - 移除
network: host配置,重新执行docker-compose build和docker-compose up测试。
4. 基础网络连通性测试
测试容器内Ping连通性:
docker run --rm alpine ping -c 3 google.com若Ping失败,说明容器网络层存在问题;若Ping通但HTTPS请求失败,需检查证书或代理。
测试DNS解析:
docker run --rm alpine nslookup google.com若解析失败,确认Docker DNS配置是否生效。
总结
优先从Docker DNS配置入手解决解析超时问题,其次排查防火墙和代理干扰;避免过度依赖network: host,优先通过自定义bridge网络排查网络模式异常。
内容的提问来源于stack exchange,提问作者bartnyk
相关产品推荐
相关产品推荐

