java - 部署在 Heroku 上的 Quarkus 应用程序出现错误 R10(启动超时)
问题描述
我在将 Quarkus 1.10 应用程序作为 Docker 映像部署到 Heroku 时遇到问题。
相同的应用程序,使用 SpringBoot 和类似的 Docker Image 成功启动,但由于 $PORT 绑定错误,Quarkus 以某种方式触发了臭名昭著的 R10 Boot Timeout 错误,即使我看到启动时间非常短(2 秒 vs. 4.5 秒) SpringBoot 版本)。如果我在本地启动图像,它可以完美运行而没有问题。
我最终的 Docker Image 是这样的(为简洁起见,省略了多阶段构建步骤):
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
我看不出错误在哪里。我也尝试EXPOSE
从 Dockerfile 中删除指令,但这不是错误的原因。
解决方案
我已经解决了这个问题,这真的很愚蠢。
修改 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} 选择正确的值
推荐阅读
- css - 只有最后选定的行是焦点
- android - 无法在 Android 中获取文件
- java - 尽管项目的 gradle.properties 文件中有值,但未重用 Gradle 守护程序并且未应用 jvmargs
- javascript - Select2 版本 4 及更高版本无法获取数据结果
- python - 测试NB模型
- c# - 如何从资源文件夹中实时加载图像作为游戏对象/原始图像上的网络摄像头纹理
- matlab - 如何在matlab中修复错误gui因为imtile
- html - 如何在div内水平和垂直居中图像
- java - 用递归方法计算可以被2除的元素
- php - 与雄辩模型相关的“哪里”