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

GitLab Runner运行任务报错port 443: Operation timed out如何处理?

核心原因

你遇到的报错本质是Docker executor启动的CI任务容器无法访问私有GitLab实例,宿主机网络可达不代表容器内网络可达,因为Docker默认做了网络隔离。常见诱因如下:

  • Docker容器使用的DNS无法解析私有GitLab的内网域名
  • 宿主机iptables的FORWARD链拦截了Docker网桥的出站流量
  • GitLab Runner的docker executor配置错误(如网络模式、域名映射缺失)
  • 私有GitLab服务绑定在宿主机回环地址,容器默认桥接网络无法访问
排查步骤
  1. 验证容器内的网络可达性
    手动拉取CI任务使用的基础镜像,启动临时容器测试连通性:
# 测试域名解析
docker run --rm <你的CI任务基础镜像> nslookup gitlab.xxx.com
# 测试端口连通性
docker run --rm <你的CI任务基础镜像> nc -vz gitlab.xxx.com 443

如果这一步不通,说明确实是容器内网络问题,继续往下排查。

  1. 检查GitLab Runner配置
    打开Runner配置文件(默认路径/etc/gitlab-runner/config.toml),查看[runners.docker]段落的配置:
  • 是否配置了内网DNS服务器
  • 是否配置了gitlab.xxx.com的hosts映射
  • 网络模式是否符合预期
  1. 检查iptables规则
    执行iptables -nvL FORWARD查看FORWARD链规则,确认是否存在拦截Docker网桥流量的规则。Docker服务启动时会默认在FORWARD链添加放行规则,手动修改iptables、重启防火墙服务都可能清空这些规则。

  2. 确认GitLab服务监听地址
    检查GitLab服务是否仅绑定了宿主机127.0.0.1回环地址,如果是,桥接模式下的容器无法访问该地址。

解决方案

对应不同诱因可选以下修复方案:

  • 域名解析异常:
    在[runners.docker]段落添加内网DNS配置:
    dns = ["你的内网DNS服务器IP"]
    
    或者直接添加域名硬解析:
    extra_hosts = ["gitlab.xxx.com:你的GitLab服务器内网IP"]
    
    修改完成后执行systemctl restart gitlab-runner重启服务生效。
  • FORWARD链拦截流量:
    执行以下命令放行Docker网桥流量:
    iptables -A FORWARD -i docker0 -j ACCEPT
    
    或者直接重启Docker服务恢复默认规则(注意会重启宿主机上所有运行中的Docker容器,提前评估业务影响)。
  • 网络配置错误:
    可以直接将Docker executor的网络模式改为host,共享宿主机网络栈:
    在[runners.docker]段落添加:
    network_mode = "host"
    
    或者注册Runner时直接指定参数:gitlab-runner register --docker-network-mode=host 其他注册参数
  • GitLab绑定回环地址:
    修改GitLab配置文件,将监听地址改为宿主机内网物理网卡IP,或者使用上述host网络模式、添加docker0网桥IP的host映射即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:24:01