![](/img/trans.png)
[英]Spring Boot app in Docker receives: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
[英]Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch - Heroku
我正在尝试在 heroku 上部署我的服务器。 我收到此错误:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
这是我的 Java 类:
package introsde.document.endpoint;
import javax.xml.ws.Endpoint;
import introsde.assignment.soap.PeopleImpl;
public class PeoplePublisher {
public static String SERVER_URL = "http://localhost";
public static String PORT = "6902";
public static String BASE_URL = "/ws/people";
public static String getEndpointURL() {
return SERVER_URL+":"+PORT+BASE_URL;
}
public static void main(String[] args) {
String endpointUrl = getEndpointURL();
System.out.println("Starting People Service...");
System.out.println("--> Published at = "+endpointUrl);
Endpoint.publish(endpointUrl, new PeopleImpl());
}
}
我怎么解决这个问题?
谢谢
我在尝试创建一个最小的 spring-boot 应用程序时遇到了同样的问题。 我已经将 heroku 的 java-getting-started 实现与我的进行了比较,发现了这个很好的修复。 只需将此添加到src/main/resources/application.properties
server.port=${PORT:5000}
简单的解决方案:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/myapi-1.0.0.jar
将myapi-1.0.0
替换为您的 jar 名称或使用*
注意:变量的顺序很重要。 例如:以下不起作用。
web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/myapi-1.0.0.jar
您必须绑定到 Heroku 分配给您的端口作为 env var $PORT
和主机0.0.0.0
。 因此,您应该更改代码以包含以下内容:
public static String PORT = System.getenv("PORT");
SERVER_URL
部分可能更棘手。 您可以使用 0.0.0.0,但如果您确实需要可公开访问的 URL,则需要设置如下内容(将“yourappname”更改为您的应用程序名称):
$ heroku config:set SERVER_URL="https://yourappname.herokuapp.com"
然后添加代码:
public static String SERVER_URL = System.getenv("SERVER_URL");
另外,我想添加以下内容到 Procfile,允许我将 Spring boot 应用程序部署到 heroku 并解决您上面描述的异常:
worker: java $JAVA_OPTS -jar target/myTargetJar-SNAPSHOT.jar
网上列出的所有解决方案都没有帮助我解决问题,这就是为什么我决定在这里发布对我有帮助的解决方案。 不过可能不准时:)
为自己尝试了一切。 @fortellao 的回答对我来说是一个救星。 如果有人像我一样使用 src/main/resources/ application.yml,只需添加一点:
app:
server:
port: {$PORT}
端口: 5000 在我的情况下起到了作用。
由于您的这不是 Spring Boot 应用程序,因此您应该执行以下操作:
package introsde.document.endpoint;
import javax.xml.ws.Endpoint;
import introsde.assignment.soap.PeopleImpl;
public class PeoplePublisher {
public static String SERVER_URL = "http://localhost";
public String port;
public static String BASE_URL = "/ws/people";
public static String getEndpointURL() {
return SERVER_URL+":"+port+BASE_URL;
}
public static void main(String[] args) {
port = Integer.valueOf(args[0]);
String endpointUrl = getEndpointURL();
System.out.println("Starting People Service...");
System.out.println("--> Published at = "+endpointUrl);
Endpoint.publish(endpointUrl, new PeopleImpl());
}
}
然后在您的 Procfile 上:
web: java $JAVA_OPTS -jar target/*.jar $PORT
这样你就可以将你的套接字绑定到 Heroku 期望你监听的端口。
您可能在不等待服务器完成运行的情况下发出请求,因此它会中断,因为无法在 90 秒之前完成构建。
这是这里发生的猜测。
当 Heroku 找不到 Procfile 中指定的端口时会出现此问题。
这个问题的一个简单解决方案是通过 Procfile 动态地进行端口设置。
添加 Procfile ->
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/nome_do_meu_app.jar
请记住,Maven 打包应该是 JAR。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.