GitLab Runner运行任务报错port 443: Operation timed out如何处理?
核心原因
你遇到的报错本质是Docker executor启动的CI任务容器无法访问私有GitLab实例,宿主机网络可达不代表容器内网络可达,因为Docker默认做了网络隔离。常见诱因如下:
- Docker容器使用的DNS无法解析私有GitLab的内网域名
- 宿主机iptables的FORWARD链拦截了Docker网桥的出站流量
- GitLab Runner的docker executor配置错误(如网络模式、域名映射缺失)
- 私有GitLab服务绑定在宿主机回环地址,容器默认桥接网络无法访问
排查步骤
- 验证容器内的网络可达性
手动拉取CI任务使用的基础镜像,启动临时容器测试连通性:
# 测试域名解析 docker run --rm <你的CI任务基础镜像> nslookup gitlab.xxx.com # 测试端口连通性 docker run --rm <你的CI任务基础镜像> nc -vz gitlab.xxx.com 443
如果这一步不通,说明确实是容器内网络问题,继续往下排查。
- 检查GitLab Runner配置
打开Runner配置文件(默认路径/etc/gitlab-runner/config.toml),查看[runners.docker]段落的配置:
- 是否配置了内网DNS服务器
- 是否配置了gitlab.xxx.com的hosts映射
- 网络模式是否符合预期
检查iptables规则
执行iptables -nvL FORWARD查看FORWARD链规则,确认是否存在拦截Docker网桥流量的规则。Docker服务启动时会默认在FORWARD链添加放行规则,手动修改iptables、重启防火墙服务都可能清空这些规则。确认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网桥流量:
或者直接重启Docker服务恢复默认规则(注意会重启宿主机上所有运行中的Docker容器,提前评估业务影响)。iptables -A FORWARD -i docker0 -j ACCEPT - 网络配置错误:
可以直接将Docker executor的网络模式改为host,共享宿主机网络栈:
在[runners.docker]段落添加:
或者注册Runner时直接指定参数:network_mode = "host"gitlab-runner register --docker-network-mode=host 其他注册参数 - GitLab绑定回环地址:
修改GitLab配置文件,将监听地址改为宿主机内网物理网卡IP,或者使用上述host网络模式、添加docker0网桥IP的host映射即可解决。
内容的提问来源于stack exchange,提问作者leanghy
相关产品推荐
相关产品推荐

