错误R10(引导超时)> Web进程在启动后90秒内未能绑定到$ PORT

时间:2018-08-07 11:54:27

标签: java docker heroku dockerfile

我正在部署其中包含CMD行的Docker映像:

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

我应该更改配置什么?

3 个答案:

答案 0 :(得分:0)

您需要在application.properties(或Yaml)中创建以下条目:

server.port=${PORT:8080}

原因在Docker docs中进行了描述。您可以将$个变量放入CMD中。

答案 1 :(得分:0)

scripts = "$(\"" + selects[i].id + "\").selectize(" + JSON.stringify(test) + "); "; 应该先这样

-Dserver.port

enter image description here

答案 2 :(得分:0)

一般而言,其他答案是正确的,但根据环境的不同,(1)可能未定义PORT,(2)变量PORT可能会丢失主机>容器> JVM之间的转换。如果您使用-Dserver.port而不是--server.port,则尤其如此。

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

// application.properties
server.port=${PORT:8080}
// Dockerfile
CMD ["java", "-jar", "myapp.jar", "--server.port=${PORT:8080}"]