如何通过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
相关产品推荐
相关产品推荐

