Spring Boot应用实际运行在端口0上,而不是随机端口

11

我的application.properties文件包含以下内容:

server.port=0

这个应该被Spring Boot捕获并设置为随机端口。

然而,它实际上是在0端口启动的,在Spring日志中也是这样记录的:

01/Mar/2019 12:50:43,600- TomcatEmbeddedServletContainer: Tomcat initialized with port(s): 0 (http)

尤里卡认为这是一个“向上”的服务,并提供指向该服务的链接(localhost:0/info),但点击它会给我的浏览器返回'ERR_ADDRESS_INVALID',猜测是因为这不是有效的端口号。
应用程序正在运行以向 Eureka 发送心跳,但为什么 Spring 没有设置随机端口号呢?
是否有任何设置可以防止随机设置?如果有,如何取消设置?
编辑:对于任何新的引导应用程序,server.port=0 是随机的,只是对于存在很多依赖关系的现有 Spring Boot 应用程序而言,它无法正常工作。

2
你的Spring Boot版本是哪个,它不能工作? - Karol Dowbecki
1
@Karol Spring boot 2.1.6.RELEASE with Greenwich.SR1 - Crickcoder
1
应用程序在正确的动态端口上启动,但是Eureka只看到端口为0。 - Crickcoder
1
@GauravVarma 看看这个:https://stackoverflow.com/questions/53491970/eureka-not-able-to-find-port-when-running-microservices-on-random-port - Sunil Dabburi
2个回答

12

其实它并不是在0端口启动,而是在一个随机端口启动。在您的eureka服务器上,您会看到它在0端口,但如果您将自己放在顶部而不点击,您会发现浏览器栏中的端口是不同的。

日志中显示:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 0 (http)

但后来更改了它:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 64039 (http) with context path ''
INFO  o.s.c.n.e.s.EurekaAutoServiceRegistration - Updating port to 64039

如果你们之间存在通信问题,那是因为在每个微服务中,你需要从随机端口开始配置application.yml中的preferIpAddress以通过ip而不是主机名进行查找。

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:portServer/eureka/
  instance:
    preferIpAddress: true

我已将preferIpAddress设置为true,但问题仍然存在。 - Crickcoder
我猜你已经使用spring-boot-starter-actuator依赖来访问host:port/actuator/info的URL了,如果出现了同样的错误,你尝试过用Firefox浏览器吗? - Francesc Recio

4

尝试以编程方式设置端口:

@Configuration
public class ServletConfig {

    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
            container.setPort(new Random().nextInt(65_535) + 1_000);
        });
    }
}

此外,这可能会有所帮助:运行随机端口的微服务时,Eureka无法找到端口


这启动了应用程序在一个随机端口上,但可能太晚了,因为eureka仍然在查看端口0。 - StevenWernerCS
你正在使用哪个版本的Spring Boot和Spring Cloud? - Mikhail Kholodkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接