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

如何配置Spring Boot Maven插件从私有Nexus拉取JVM镜像?

问题场景

我们使用私有Nexus仓库存储Docker镜像,之前通过Dockerfile拉取JVM:

FROM docker-nexus.mycompany.tools/eclipse-temurin:17-jdk-alpine

现在改用Maven的spring-boot:build-image目标替代Dockerfile,已配置插件的builderRegistry和publishRegistry指向私有Nexus:

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
    <docker>
        <builderRegistry>
            <url>docker-nexus.mycompany.tools</url>
            ... 用户名密码 ...
        </builderRegistry>
        <publishRegistry>
            <url>docker-nexus.mycompany.tools</url>
            ... 用户名密码 ...
        </publishRegistry>
    </docker>
</configuration>

但构建时仍尝试从GitHub下载JRE,被防火墙拦截:

[INFO]     [creator]       BellSoft Liberica JRE 17.0.12: Contributing to layer
[INFO]     [creator]         Downloading from https://github.com/bell-sw/Liberica/releases/download/17.0.12+10/bellsoft-jre17.0.12+10-linux-amd64.tar.gz

查阅Paketo文档后发现现有buildpack均不支持私有Nexus,想知道是否能实现从私有Nexus拉取JVM镜像,还是必须回归Dockerfile?


解决方案

方法1:配置Paketo JVM Buildpack的自定义源(推荐)

你之前配置的builderRegistry仅用于拉取Paketo的builder镜像,而JVM包是由JVM Buildpack从上游源下载的,需要通过环境变量指定私有仓库地址:

  1. 先把对应版本的JVM包(比如eclipse-temurin的jdk/jre tar.gz)上传到私有Nexus的仓库中,比如路径为https://docker-nexus.mycompany.tools/repository/jvm-packages/
  2. 修改Maven插件配置,添加环境变量指定JVM版本和私有仓库地址:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <docker>
            <builderRegistry>
                <url>docker-nexus.mycompany.tools</url>
                <username>你的用户名</username>
                <password>你的密码</password>
            </builderRegistry>
            <publishRegistry>
                <url>docker-nexus.mycompany.tools</url>
                <username>你的用户名</username>
                <password>你的密码</password>
            </publishRegistry>
        </docker>
        <environment>
            <!-- 指定需要的JVM版本 -->
            <BP_JVM_VERSION>17</BP_JVM_VERSION>
            <!-- 指定私有Nexus上的JVM包仓库前缀 -->
            <BP_JVM_REPOSITORY>https://docker-nexus.mycompany.tools/repository/jvm-packages/</BP_JVM_REPOSITORY>
        </environment>
    </configuration>
</plugin>

Buildpack会自动拼接版本号到仓库地址后,拉取对应的JVM包。

方法2:构建自定义Paketo Builder镜像

如果方法1无法满足需求,可以自己定制包含私有源配置的Builder:

  1. 克隆Paketo官方的Builder仓库,修改JVM Buildpack的配置文件,将默认的JVM源替换为你的私有Nexus地址
  2. 构建自定义Builder镜像并推送到私有Nexus仓库
  3. 在Spring Boot插件中指定使用这个自定义Builder:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <builder>docker-nexus.mycompany.tools/custom-paketo-builder:latest</builder>
        </image>
        <docker>
            <builderRegistry>...</builderRegistry>
            <publishRegistry>...</publishRegistry>
        </docker>
    </configuration>
</plugin>

方法3:回归Dockerfile(备选)

如果上述两种方法都无法落地,回归Dockerfile是最稳妥的方案——你已经能通过Dockerfile成功拉取私有Nexus的JVM镜像,同时可以结合Spring Boot的dockerfile:build目标,保持Maven构建流程的一致性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:25:19