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

Spring Boot bootBuildImage报400错误:Host头格式异常

Spring Boot bootBuildImage 报400 Bad Request: malformed Host header 问题解决

问题详情

执行Spring Boot的bootBuildImage任务时触发400 Bad Request: malformed Host header错误。当前build.gradle配置如下:

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.4'
    id 'io.spring.dependency-management' version '1.1.7'
}

tasks.named("bootBuildImage") {
    imageName = "${project.name}"
    imagePlatform = "linux/amd64"
    createdDate = "now"
    buildpacks = ["urn:cnb:builder:paketo-buildpacks/java", "gcr.io/paketo-buildpacks/health-checker:latest"]
}

日志显示旧项目请求的Host为/Users/nine/.docker/run/docker.sock,触发400错误;而配置相似的新项目可正常运行,其请求Host为localhost:2376,两者Apache-HttpClient版本存在差异。

已尝试但无效的操作:

  • 清理.gradle/caches/
  • 设置DOCKER_HOST环境变量为tcp://localhost:2376,无法连接
  • 在build.gradle中配置docker { host = "tcp://localhost:2376"},仍无法连接
  • 执行brew reinstall --cask docker重装Docker

推测问题与Docker“允许使用默认Docker套接字”设置有关,但取消勾选后无效,且仅旧项目出现该问题,怀疑存在缓存残留。

解决步骤

1. 确认Docker TCP端口配置

打开Docker Desktop设置 -> Docker Engine,检查配置是否启用了TCP端口,正确配置示例:

"hosts": ["unix:///var/run/docker.sock", "tcp://localhost:2375"]

注意:2375是无加密端口,2376是加密端口,若使用2376需配置TLS证书。如果之前2376无法连接,优先尝试2375。

2. 显式在bootBuildImage任务中配置Docker Host

旧项目可能存在配置缓存或插件依赖问题,需直接在bootBuildImage任务块内配置Docker连接:

tasks.named("bootBuildImage") {
    imageName = "${project.name}"
    imagePlatform = "linux/amd64"
    createdDate = "now"
    buildpacks = ["urn:cnb:builder:paketo-buildpacks/java", "gcr.io/paketo-buildpacks/health-checker:latest"]
    // 配置Docker主机地址
    docker {
        host = "tcp://localhost:2375"
        // 若使用加密端口2376,需添加证书路径配置
        // certPath = "/Users/nine/.docker/certs.d/localhost:2376"
    }
}

3. 彻底清理项目缓存

仅清理.gradle/caches可能不够,需执行以下操作:

  • 删除项目根目录下的.gradle文件夹
  • 删除项目根目录下的build文件夹
  • 执行终端命令:gradle clean
  • 重启IDE,确保旧配置完全清除

4. 统一Apache-HttpClient版本

由于新旧项目HttpClient版本差异可能导致请求格式异常,在dependencyManagement块中强制指定版本:

dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
    dependencies {
        dependency 'org.apache.httpcomponents:httpclient:4.5.14' // 替换为新项目使用的版本
    }
}

5. 验证Docker TCP连接

在终端执行命令测试连接是否正常:

curl http://localhost:2375/version

若返回Docker版本信息,说明TCP连接正常;若失败,检查Docker Desktop端口是否开启、防火墙是否拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:40:18