簡體   English   中英

Spring Docker 中的啟動應用程序收到:錯誤 R10(啟動超時)-> Web 進程在啟動后 60 秒內無法綁定到 $PORT

[英]Spring Boot app in Docker receives: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

我在 Docker 中有一個 Spring 啟動應用程序,它在 Heroku 上運行。

最近,將 Tomcat 更新到 10.1.0-M10 后,我開始收到此錯誤:

錯誤 R10(啟動超時)-> Web 進程在啟動后 60 秒內無法綁定到 $PORT

由於早期版本中的漏洞,立即降級到較低版本的想法行不通。 我檢查了可能的原因,發現 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

我找到了一個不完美但似乎對我有用的解決方案。

  • 降級 Spring 引導從2.6.32.6.1
  • Tomcat 從10.XX降級到9.XX
  • 刪除了開發工具依賴項

我認為最近的兩個發揮了魔力。 開發工具停止在測試/生產環境中請求額外的端口。 Tomcat 在版本9.XX中綁定端口,但在10.XX中不綁定。

即使我找到了解決方案,我也不知道為什么它會這樣,而且它在安全方面也不是完美的。

從錯誤消息看來$PORT未解析為任何環境變量。

部署到 heroku 你必須使用.env文件來定義環境變量(你不能使用docker run -e PORT=1234見文檔

在本地使用 heroku 時,可以在 .env 文件中設置配置變量。 當 heroku 本地運行時,讀取 env 並在環境中設置每個名稱/值對。 使用 Docker 時可以使用這個 same.env 文件: docker run -p 5000:5000 --env-file.env <image-name>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM