Java 错误R10(启动超时)>;Web进程在启动后90秒内绑定到$PORT失败

Java 错误R10(启动超时)>;Web进程在启动后90秒内绑定到$PORT失败,java,docker,heroku,dockerfile,Java,Docker,Heroku,Dockerfile,我正在部署一个Docker映像,其中包含CMD行: CMD ["java","-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap","-Djava.security.egd=file:/dev/./urandom","-Dspring.server.port=$PORT","-Dserver.port=$PORT","-jar","/life-project.jar"] 在日志中,它看起来像: 2018-08-

我正在部署一个Docker映像,其中包含CMD行:

CMD ["java","-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap","-Djava.security.egd=file:/dev/./urandom","-Dspring.server.port=$PORT","-Dserver.port=$PORT","-jar","/life-project.jar"]
在日志中,它看起来像:

2018-08-06T10:51:17.489612+00:00 heroku[web.1]: Starting process with command java -XX:\+UnlockExperimentalVMOptions -XX:\+UseCGroupMemoryLimitForHeap -Djava.security.egd\=file:/dev/./urandom -Dspring.server.port\=\48227 -Dserver.port\=\48227 -jar /life-project.jar
出现以下错误:

2018-08-06T10:51:26.106011+00:00 app[web.1]: ***************************
2018-08-06T10:51:26.106012+00:00 app[web.1]: APPLICATION FAILED TO START
2018-08-06T10:51:26.106014+00:00 app[web.1]: ***************************
2018-08-06T10:51:26.106015+00:00 app[web.1]:
2018-08-06T10:51:26.106017+00:00 app[web.1]: Description:
2018-08-06T10:51:26.106018+00:00 app[web.1]:
2018-08-06T10:51:26.106020+00:00 app[web.1]: Failed to bind properties under 'server.port' to java.lang.Integer:
2018-08-06T10:51:26.106021+00:00 app[web.1]:
2018-08-06T10:51:26.106022+00:00 app[web.1]: Property: server.port
2018-08-06T10:51:26.106024+00:00 app[web.1]: Value: $PORT
2018-08-06T10:51:26.106025+00:00 app[web.1]: Origin: "server.port" from property source "systemProperties"
2018-08-06T10:51:26.106026+00:00 app[web.1]: Reason: failed to convert java.lang.String to java.lang.Integer
2018-08-06T10:51:26.106028+00:00 app[web.1]:
2018-08-06T10:51:26.106029+00:00 app[web.1]: Action:
2018-08-06T10:51:26.106030+00:00 app[web.1]:
2018-08-06T10:51:26.106032+00:00 app[web.1]: Update your application's configuration

我应该在配置中更改什么?

您需要在
应用程序.properties
(或yaml)中创建以下条目:


有关原因,请参阅。您可以将
$
变量放在
CMD

-Dserver中。端口应位于第一位,如下所示

CMD[“sh”、“-c”、“java-Dserver.port=$port-Xmx300m-Xss512k-Dfile.encoding=UTF-8-Dspring.profiles.active=prod-Djava.security.egd=file:/dev//uradom-jar/opt/application.jar”]

一般来说,其他答案是正确的,但取决于环境,(1)可能未定义
端口,以及(2)在主机>容器>JVM之间的转换过程中,var
端口可能会丢失。如果使用
-Dserver.port
而不是
-server.port
,则情况尤其如此

对我来说,解决这个问题的方法是在application.properties和Dockerfile中使用默认值,并使用
--server.port
而不是
-Dserver.port

// application.properties
server.port=${PORT:8080}
检查以确保
“-Dserver.port=$port”
有效
// application.properties
server.port=${PORT:8080}
// Dockerfile
CMD ["java", "-jar", "myapp.jar", "--server.port=${PORT:8080}"]