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

Spring Gradle bootBuildImage未使用指定Docker主机报错如何解决

问题根因

Spring Boot 2.7.0 版本的 bootBuildImage 任务存在 DSL 属性绑定bug,docker 配置块内的远程主机、TLS校验、证书路径参数不会被传递到底层的Cloud Native Buildpacks构建进程。构建进程默认读取本地Docker配置,无有效配置时会直连本地默认Unix Socket /var/run/docker.sock,因此抛出连接拒绝错误。

修复方案

二选一即可:

  • 方案一:升级Spring Boot版本(推荐)
    将Spring Boot版本升级至2.7.1及以上的2.7.x正式版,该bug在2.7.1版本中已被修复。升级后修正证书路径的写法(JVM不会自动解析~为用户主目录),原有配置即可正常生效:

    tasks.named<BootBuildImage>("bootBuildImage") {
        imageName = "repository.intra.net:28082/service:${project.version}"
        docker {
            host = "tcp://dev1.docker.intra.net:2376"
            isTlsVerify = true
            certPath = "${System.getProperty("user.home")}/docker-certs/"
        }
    }
    
  • 方案二:不升级版本,通过环境变量传参
    若暂时无法升级Spring Boot版本,无需使用docker配置块,直接给任务注入标准Docker客户端环境变量,底层构建器会自动识别这些参数连接远程主机:

    tasks.named<BootBuildImage>("bootBuildImage") {
        imageName = "repository.intra.net:28082/service:${project.version}"
        environment.putAll(mapOf(
            "DOCKER_HOST" to "tcp://dev1.docker.intra.net:2376",
            "DOCKER_TLS_VERIFY" to "1",
            "DOCKER_CERT_PATH" to "${System.getProperty("user.home")}/docker-certs/"
        ))
    }
    
校验方法

配置完成后执行./gradlew bootBuildImage --info,若日志中打印Using Docker host tcp://dev1.docker.intra.net:2376相关内容,即代表远程Docker配置已生效,不会再尝试连接本地Socket。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:03:49