我在 Docker 中有一个在 Heroku 上运行的 Spring Boot 应用。
最近,将 Tomcat 更新到 10.1.0-M10 后,我开始收到此错误:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
由于早期版本中的漏洞,立即降级到较低版本的想法行不通。我检查了可能的原因并找到了 Tomcat binding port issue .
我无法为不同的端口设置固定配置,因为我正在部署到 Heroku 并依赖于它们的随机端口。
我的 Dockerfile:
FROM azul/zulu-openjdk-alpine:11
ENV PORT=$PORT
COPY /target/app.jar /app.jar
CMD java -Xms256m -Xmx512m \
-Dlog4j2.formatMsgNoLookups=true \
-Djava.security.egd=file:/dev/./urandom \
-Dserver.port=$PORT \
-jar /app.jar
解决方法是什么?有什么我想念的吗?
更新:
还有更多来自 Heroku 的日志:
Feb 22 12:50:16 integration-test app/web.1 2022-02-22 20:50:16.057 [main] INFO c.g.s.z.ApplicationKt - Started ApplicationKt in 8.09 seconds (JVM running for 9.062)
Feb 22 12:50:16 integration-test app/web.1 2022-02-22 20:50:16.060 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean - Application availability state LivenessState changed to CORRECT
Feb 22 12:50:16 integration-test app/web.1 2022-02-22 20:50:16.063 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean - Application availability state ReadinessState changed to ACCEPTING_TRAFFIC
Feb 22 12:51:06 integration-test heroku/web.1 Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
最佳答案
我找到了一个不完美但似乎对我有用的解决方案。
- 将 Spring Boot 从
2.6.3
降级到2.6.1
- 将 Tomcat 从
10.X.X
降级到9.X.X
- 删除了开发工具依赖项
我认为最近的两个发挥了魔力。开发工具停止在测试/生产环境中请求额外的端口。 Tomcat在9.X.X
版本绑定(bind)端口,10.X.X
版本不绑定(bind)。
即使我找到了解决方案,我也不知道为什么它会这样,而且它在安全方面也不是完美的。
关于java - Docker 中的 Spring Boot 应用程序收到 : Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71144037/