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

如何通过quarkus-container-image-docker扩展实现镜像构建强制拉取?

问题解答:Quarkus Docker镜像构建时强制拉取与禁用缓存

核心结论

目前quarkus-container-image-docker扩展本身不支持直接配置--pull和--no-cache参数,从你查看的DockerProcessor源码来看,该扩展确实没有封装这两个Docker build命令的处理逻辑。

可行替代方案

1. 直接使用原生Docker命令

最直接的方式就是绕开Quarkus扩展,手动执行原生Docker命令:

docker build --pull --no-cache .

如果要结合Quarkus的构建流程,先执行Quarkus的原生编译(比如mvn package -Pnative),再运行上述命令即可。

2. 通过Maven/Gradle钩子集成

可以借助构建工具的钩子,在Quarkus编译完成后自动触发带参数的Docker构建:
以Maven为例,在pom.xml中添加配置,关闭Quarkus自带的镜像构建,同时用exec-maven-plugin执行原生Docker命令:

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                    <phase>package</phase>
                </execution>
            </executions>
            <configuration>
                <!-- 关闭Quarkus自带的镜像构建 -->
                <buildArgs>
                    <Dquarkus.container-image.build>false</Dquarkus.container-image.build>
                </buildArgs>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>docker-build</id>
                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>docker</executable>
                        <arguments>
                            <argument>build</argument>
                            <argument>--pull</argument>
                            <argument>--no-cache</argument>
                            <argument>.</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn package时,会先完成Quarkus的原生编译,再自动执行带--pull和--no-cache的Docker构建。

3. Dockerfile层面的折中方案

如果仅需确保基础镜像依赖最新,可在Dockerfile中添加更新命令,但这无法替代--no-cache的全局禁用缓存效果,效率也不如--pull直接拉取最新基础镜像:

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6
WORKDIR /work/
# 添加更新命令确保依赖最新
RUN microdnf update -y && microdnf clean all
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:38:20