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

Github Action自托管Runner运行gradlew出现SocketException: Connection reset问题

问题根因

你在Docker中全局安装的Gradle不会被项目自带的gradlew(Gradle Wrapper)直接复用。gradlew脚本的默认逻辑是优先读取项目内gradle/wrapper/gradle-wrapper.properties文件指定的Gradle版本、分发包类型(bin/all),如果本地缓存没有完全匹配的包,就会触发远程下载,你的自托管Runner网络无法正常访问Gradle官方服务,所以抛出Connection reset报错。

可行解决方案

  • 方案1:直接调用全局Gradle,跳过Wrapper
    工作流中执行命令时,把./gradlew替换为gradle即可,直接调用你Docker中预安装的Gradle,完全不会触发下载逻辑:
    gradle --version
    gradle app:assembleBetaRelease --offline
    
  • 方案2:预配置Gradle Wrapper缓存,避免运行时下载
    如果必须使用gradlew脚本,在Dockerfile中增加Wrapper缓存配置:
    1. 先确认项目gradle-wrapper.properties中distributionUrl对应的Gradle版本、包类型(你报错中是gradle-7.0.2-all.zip,和你预安装的bin版本不匹配)
    2. Docker构建阶段提前下载对应包,放到Wrapper默认缓存路径/root/.gradle/wrapper/dists/并完成解压,配置对应读写权限
    3. 也可以直接修改distributionUrl为本地已下载的zip包路径,完全屏蔽远程下载逻辑
  • 方案3:统一项目Wrapper版本
    Docker构建阶段执行gradle wrapper --gradle-version 7.0.2 --distribution-type bin,生成和全局安装版本匹配的Wrapper文件,覆盖项目自带的配置,运行时就不会触发下载。

注意事项

如果你的容器运行用户不是root,需要确认Gradle安装目录、.gradle缓存目录对应用户有读写权限,权限不足导致无法读取预安装文件时,也会触发远程下载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03