如何指定自定义镜像仓库用于Quarkus原生镜像构建?
问题根因
Podman的registries.search配置生效范围仅限不带仓库域名前缀的短镜像名(例如仅指定ubi-quarkus-native-image:22.0-java11时,才会按search列表顺序遍历仓库查找镜像)。Quarkus容器化构建原生镜像时,默认拉取的是带完整域名的镜像quay.io/quarkus/ubi-quarkus-native-image:22.0-java11,Podman遇到带明确域名前缀的镜像会直接请求对应域名的公网仓库,不会触发search列表匹配逻辑,因此预先配置的内部Nexus仓库地址不会被调用。
解决方案
可根据实际场景选择以下任意一种方案:
方案1:Quarkus侧指定内部构建镜像
该方案仅对当前项目生效,不需要修改全局容器配置,是最推荐的轻量方案:
- 提前将对应版本的Quarkus原生构建镜像同步到内部Nexus仓库,记录镜像的完整访问路径,例如
our.nexus/quarkus/ubi-quarkus-native-image:22.0-java11 - 构建时通过参数指定构建镜像地址,完整命令如下:
mvn clean package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=our.nexus/quarkus/ubi-quarkus-native-image:22.0-java11
- 如果需要对当前项目永久生效,可将配置写入项目
src/main/resources/application.properties文件:
quarkus.native.builder-image=our.nexus/quarkus/ubi-quarkus-native-image:22.0-java11
方案2:Podman侧配置镜像拉取代理(全局生效)
如果需要所有Podman拉取quay.io镜像的请求都走内部Nexus,不需要修改Quarkus项目配置,可通过配置镜像转发规则实现:
- 提前在Nexus中创建quay.io的代理仓库,记录代理仓库的访问路径
- 编辑
/etc/containers/registries.conf文件,追加以下配置:
[[registry]] prefix = "quay.io" location = "quay.io" [[registry.mirror]] location = "our.nexus/quay-proxy" # 替换为Nexus代理仓库实际路径
- 保存配置后直接执行原有构建命令即可,Podman拉取quay.io镜像时会优先从配置的内部代理地址拉取。
注意:配置完成后可先手动执行
podman pull quay.io/quarkus/ubi-quarkus-native-image:22.0-java11验证镜像是否能从内部仓库正常拉取,确认正常后再执行Quarkus构建。
内容的提问来源于stack exchange,提问作者eerriicc
相关产品推荐
相关产品推荐

