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

使用Spring Boot Maven插件推送Docker镜像至GHCR失败求助

问题分析与解决方案

环境信息

  • Spring Boot 3.4.2
  • Java 23
  • Maven 3.9.9
  • 现象:mvn clean spring-boot:build-image可成功构建镜像,但通过build-image-no-fork推送GHCR时失败,报错Execution default of goal org.springframework.boot:spring-boot-maven-plugin:3.4.2:build-image-no-fork failed: Error response received when pushing image: unsupported,手动推送镜像正常。

解决方案

1. 完善插件的注册表配置(核心修复)

当前pom.xml中仅配置了推送token,未指定GHCR的注册表地址,插件默认会指向Docker Hub,导致与GHCR的API不兼容,触发unsupported错误。需补充注册表地址:

修改pom.xml中<docker>节点:

<docker>
  <publishRegistry>
    <registry>ghcr.io</registry>
    <token>${env.TOKEN}</token>
    <username>${env.GITHUB_ACTOR}</username>
  </publishRegistry>
</docker>

2. 复用GitHub Actions的Docker登录状态(简化配置)

你已通过docker/login-action完成GHCR登录,Spring Boot插件可直接复用本地Docker客户端的认证信息,无需在插件中单独配置token:

  • 移除pom.xml中的<docker>配置块
  • 移除GitHub Actions中mvn命令的TOKEN环境变量,修改后的步骤:
- run: mvn clean package -Poci -DskipTests
  env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}

3. 切换插件目标为build-image

build-image-no-fork在部分环境下可能存在Docker交互兼容性问题,尝试改用标准的build-image目标:

修改pom.xml中的execution配置:

<executions>
  <execution>
    <goals>
      <goal>build-image</goal>
    </goals>
  </execution>
</executions>

4. 验证Java版本兼容性

Spring Boot 3.4.2配套的Buildpacks对Java 23的支持可能不够完善,可临时切换到LTS版本Java 21验证:

  • 修改pom.xml中的BP_JVM_VERSION:
<env>
  <BP_JVM_VERSION>21</BP_JVM_VERSION>
</env>
  • 调整GitHub Actions的Java版本配置:
- uses: actions/setup-java@v4
  with:
    java-version: '21'
    distribution: 'liberica'
    cache: 'maven'

原因说明

unsupported报错本质是容器注册表API版本不兼容:手动推送时Docker CLI已正确识别GHCR的地址和认证规则,但Spring Boot插件默认使用Docker Hub的API规范,未指定GHCR地址时会触发接口不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:12:37