当前位置: 首页 > 知识库问答 >
问题:

Docker中的Spring Boot应用程序收到:错误R10(引导超时)->Web进程在启动后60秒内绑定到$PORT失败

盖锐
2023-03-14

我在Docker中有一个在赫洛库上运行的Spring启动应用程序。

最近,在将Tomcat更新到10.1.0-M10之后,我开始出现以下错误:

错误R10(启动超时)-

由于早期版本中的漏洞,降级到较低版本的直接想法不起作用。我已经检查了可能的原因,发现Tomcat绑定端口问题。

我无法为不同的端口设置固定配置,因为我正在部署到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

共有2个答案

孟智志
2023-03-14

从错误消息来看,$PORT似乎未解析为任何环境变量。

部署到heroku,您必须使用. env文件来定义env vars(您不能使用docker run-e PORT=1234)参见留档

在本地使用heroku时,可以在.env文件中设置配置变量。运行heroku local时,将读取.env,并在环境中设置每个名称/值对。使用Docker时可以使用相同的.env文件:<code>Docker run-p 5000:5000--env file.env

戚明朗
2023-03-14

我找到了一个不完美但似乎对我有效的解决方案。

  • 将Spring引导从2.6.3降级为1.6.1
  • 将Tomcat从10.X.X降级为9.X.X
  • 已删除开发工具依赖项

我认为最近的两个做了魔术。开发工具停止在测试/生产环境中请求额外的端口。Tomcat 在版本 9.X.X 中绑定了端口,但在 10.X.X 中未绑定端口。

尽管我找到了解决方案,但我不知道它为什么会这样,而且在安全方面也不是完美的。

 类似资料: