部署在 Heroku 上的 Quarkus 应用程序出现错误 R10(启动超时)
Quarkus application deployed on Heroku gives Error R10 (Boot Timeout)
我在将 Quarkus 1.10 应用程序作为 Docker 图像部署到 Heroku 时遇到问题。
相同的应用程序,使用 SpringBoot 和类似的 Docker 图像成功启动,但由于 $PORT 的错误绑定,Quarkus 以某种方式触发了臭名昭着的 R10 启动超时错误,即使我看到启动时间是真的很小(2 秒对 SpringBoot 版本的 4.5)。
如果我在本地启动图像,它可以完美无误地运行。
我的最终Docker图像是这样的(为了简洁省略了多阶段构建步骤):
FROM gcr.io/distroless/java:11
ENV QUARKUS_MAILER_FROM=${EMAIL_USERNAME} \
QUARKUS_MAILER_USERNAME=${EMAIL_USERNAME} \
QUARKUS_MAILER_PASSWORD=${EMAIL_PASSWORD}
EXPOSE 8080
COPY --from=backend /usr/src/app/target/*-runner.jar /usr/app/app.jar
COPY --from=backend /usr/src/app/target/lib /usr/app/lib
ENTRYPOINT [ "java", "-jar" ]
CMD ["/usr/app/app.jar", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=${PORT}"]
我正在使用命令部署应用程序:
heroku container:push web
heroku container:release web
我看不出错误在哪里。我还尝试从 Docker 文件中删除 EXPOSE
指令,但这不是错误的原因。
我已经解决了这个问题,真是愚蠢。
修改 Dockerfile 的 ENTRYPOINT 和 CMD 部分如下:
ENTRYPOINT [ "java" ]
CMD ["-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=${PORT}", "-jar", "/usr/app/app.jar"]
有效。问题是,系统属性必须在 之前 -jar
参数传递,否则 Quarkus 不会为 ${PORT}
选择正确的值
我在将 Quarkus 1.10 应用程序作为 Docker 图像部署到 Heroku 时遇到问题。
相同的应用程序,使用 SpringBoot 和类似的 Docker 图像成功启动,但由于 $PORT 的错误绑定,Quarkus 以某种方式触发了臭名昭着的 R10 启动超时错误,即使我看到启动时间是真的很小(2 秒对 SpringBoot 版本的 4.5)。 如果我在本地启动图像,它可以完美无误地运行。
我的最终Docker图像是这样的(为了简洁省略了多阶段构建步骤):
FROM gcr.io/distroless/java:11
ENV QUARKUS_MAILER_FROM=${EMAIL_USERNAME} \
QUARKUS_MAILER_USERNAME=${EMAIL_USERNAME} \
QUARKUS_MAILER_PASSWORD=${EMAIL_PASSWORD}
EXPOSE 8080
COPY --from=backend /usr/src/app/target/*-runner.jar /usr/app/app.jar
COPY --from=backend /usr/src/app/target/lib /usr/app/lib
ENTRYPOINT [ "java", "-jar" ]
CMD ["/usr/app/app.jar", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=${PORT}"]
我正在使用命令部署应用程序:
heroku container:push web
heroku container:release web
我看不出错误在哪里。我还尝试从 Docker 文件中删除 EXPOSE
指令,但这不是错误的原因。
我已经解决了这个问题,真是愚蠢。
修改 Dockerfile 的 ENTRYPOINT 和 CMD 部分如下:
ENTRYPOINT [ "java" ]
CMD ["-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=${PORT}", "-jar", "/usr/app/app.jar"]
有效。问题是,系统属性必须在 之前 -jar
参数传递,否则 Quarkus 不会为 ${PORT}