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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25