如何在Render.com部署Quarkus应用?解决Docker构建失败问题
解决Render部署Quarkus应用时target目录不存在的问题
问题根源分析
你遇到的报错核心是Docker构建时找不到target/quarkus-app目录,原因有两个:
- 你使用的基础镜像
registry.access.redhat.com/ubi8/openjdk-17:1.14仅包含JDK,没有Maven环境,直接在Dockerfile中执行RUN ./mvnw package会因找不到Maven命令而失败,无法生成target目录。 - 原Dockerfile默认依赖本地已构建好的target产物,但Render构建环境是全新的,没有预先生成的构建产物。
解决方案1:使用Quarkus官方多阶段构建Dockerfile(推荐)
多阶段构建会先在包含Maven的镜像中完成编译打包,再将产物复制到轻量JDK镜像中,既解决target目录缺失问题,又避免生产镜像冗余。
替换你现有的./src/main/docker/Dockerfile.jvm内容为:
# 构建阶段:用Maven镜像完成编译打包 FROM maven:3.8.6-openjdk-17 AS builder WORKDIR /project COPY pom.xml . COPY src src RUN mvn package -DskipTests # 运行阶段:用轻量JDK镜像运行应用 FROM registry.access.redhat.com/ubi8/openjdk-17:1.14 ENV LANGUAGE='en_US:en' COPY --from=builder --chown=185 /project/target/quarkus-app/lib/ /deployments/lib/ COPY --from=builder --chown=185 /project/target/quarkus-app/*.jar /deployments/ COPY --from=builder --chown=185 /project/target/quarkus-app/app/ /deployments/app/ COPY --from=builder --chown=185 /project/target/quarkus-app/quarkus/ /deployments/quarkus/ EXPOSE 8080 USER 185 ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
解决方案2:在Render中配置前置构建命令(无需修改Dockerfile)
如果不想改动Dockerfile,可在Render项目设置中添加前置构建命令,提前生成target目录:
- 进入Render项目的Settings页面
- 找到Build Command选项,设置为:
./mvnw package -DskipTests
- 保存设置后重新触发构建
额外注意事项
- 确保GitHub仓库中包含
mvnw和mvnw.cmd文件(Quarkus初始化项目时自动生成),且mvnw有执行权限(本地执行chmod +x mvnw后推送到仓库)。 - 添加
-DskipTests可加快构建速度,若需在构建阶段运行测试可移除该参数。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

