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

Docker容器内Spring Boot应用Gradle插件下载失败的网络问题

解决Docker容器内Gradle依赖下载TLS/证书问题

先搞定容器网络排查环境

因为Spring应用容器启动就退出,没法直接查网络,先改启动命令让容器保持运行:

  • 在docker-compose.yml里给Spring应用服务替换启动命令:command: sleep 3600,这样容器启动后会挂住不退出
  • 启动容器后,执行docker exec -it <容器ID> /bin/bash进入容器,运行以下命令验证网络:
    • ping google.com 确认基础外网连通性
    • curl -v https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-gradle-plugin/2.5.4/spring-boot-gradle-plugin-2.5.4.jar 看HTTPS请求的TLS握手细节,定位是证书不被信任还是TLS版本不兼容

解决证书信任问题

如果curl提示证书验证失败,说明容器里缺根证书,按镜像类型补装:

  • 用Debian/Ubuntu基础镜像的话,在Dockerfile加:
    RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates
    
  • 用Alpine镜像的话,在Dockerfile加:
    RUN apk add --no-cache ca-certificates
    

强制Gradle用兼容的TLS版本

要是TLS版本过低导致握手失败,给Gradle指定TLS 1.2+:

  • 在项目的gradle.properties里加:
    systemProp.org.gradle.jvmargs=-Dhttps.protocols=TLSv1.2,TLSv1.3
    systemProp.javax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
    systemProp.javax.net.ssl.trustStorePassword=changeit
    
  • 或者直接在启动Gradle的命令里加参数:
    ./gradlew build -Dhttps.protocols=TLSv1.2,TLSv1.3
    

检查Docker网络配置

  • 确认Spring应用容器和数据库容器用的是同一个自定义网络,且该网络没限制外网访问
  • 要是主机用了代理,得给Docker daemon配置代理:
    编辑/etc/docker/daemon.json(没有就新建):
    {
      "proxies": {
        "default": {
          "httpProxy": "http://你的代理地址:端口",
          "httpsProxy": "http://你的代理地址:端口",
          "noProxy": "localhost,127.0.0.1,你的内网域名"
        }
      }
    }
    
    然后重启Docker:systemctl restart docker

临时方案:本地预下载依赖再复制到容器

如果前面的方法都没效果,先在本地把依赖下好,再打包进容器:

  • 本地执行./gradlew build --refresh-dependencies拉取所有依赖
  • 在Dockerfile里加复制缓存的命令:
    COPY ~/.gradle/caches /root/.gradle/caches
    COPY ~/.gradle/wrapper /root/.gradle/wrapper
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:21:35