Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Eureka未通过docker deploy在ec2上注册各种服务/zuul,但允许在本地计算机上注册服务_Spring_Spring Boot_Docker_Amazon Ec2_Netflix Eureka - Fatal编程技术网

Spring Eureka未通过docker deploy在ec2上注册各种服务/zuul,但允许在本地计算机上注册服务

Spring Eureka未通过docker deploy在ec2上注册各种服务/zuul,但允许在本地计算机上注册服务,spring,spring-boot,docker,amazon-ec2,netflix-eureka,Spring,Spring Boot,Docker,Amazon Ec2,Netflix Eureka,我看过其他几篇文章,但都没有用,我只是试图通过docker部署一个ec2实例,并向它注册各种服务/zuul。重要信息,我正在通过docker在单独的容器上运行services/eureka客户端。 是的,在使用docker部署后,我可以通过internet查看Eureka客户端页面,但它不显示任何实例。我将通过docker上的local via显示并排的日志比较,以及我的DockerFile。我的其他朋友在使用类似的application.yml和pom.xml配置/主应用程序类配置时没有任何问

我看过其他几篇文章,但都没有用,我只是试图通过docker部署一个ec2实例,并向它注册各种服务/zuul。重要信息,我正在通过docker在单独的容器上运行services/eureka客户端。 是的,在使用docker部署后,我可以通过internet查看Eureka客户端页面,但它不显示任何实例。我将通过docker上的local via显示并排的日志比较,以及我的DockerFile。我的其他朋友在使用类似的application.yml和pom.xml配置/主应用程序类配置时没有任何问题

堆栈跟踪问题:

左侧:在EC2上注册ZUUL不工作

右侧:在本地主机上注册ZUUL工作正常

Eureka主应用程序类/application.yml

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}
网关主/application.yml

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

这似乎是一个具有挑战性的领域,因为类似问题的大多数答案在整个堆栈溢出过程中都没有实现,所以我非常感谢您的尝试

根据您提供的片段和解释的场景,以下是我的假设

  • 您没有明确指定eureka服务器地址。因此,它采用默认地址(默认行为)
  • 由于您可以查看eureka web控制台,因此您正在将容器端口与主机端口(均为8761)绑定,并使用访问eureka控制台(您也在对其他容器执行相同操作)
  • 您没有使用任何docker编排工具,而是在EC2虚拟机中单独运行docker
  • 此问题的原因

    基于这些假设,我可以发现在容器中运行时,您的发现客户端应用程序(services/zuul)试图访问该容器的本地主机,而不是您的主机,因为您没有显式指定任何其他eureka URL,因此,它无法在同一容器中找到eureka服务器

    关键是,容器有自己的localhost,当您 从容器中引用localhost并不意味着您是 指主机的本地主机。相反,您的请求仍在尝试访问容器的本地主机。(想象一下这和你的 应用程序(在虚拟机上运行)

    解决方案

    您可以在
    应用程序.yml
    中指定discovery server URL。不是本地主机URL。您可以使用虚拟机的IP或域,也可以使用与访问eureka web控制台相同的地址

    为了管理这两种环境,您可以使用spring概要文件或使用环境变量来设置这些特定于环境的属性


    如果你真的不想看到你的请求离开你的机器,然后又回来,你可以考虑docker DNS。i、 e使用docker时,您可以使用友好的DNS而不是IP。为了实现这一点,请在同一docker网络中运行所有容器,然后您可以通过容器名称或主机名相互引用容器。

    根据您提供的代码片段和解释的场景,以下是我的假设

  • 您没有明确指定eureka服务器地址。因此,它采用默认地址(默认行为)
  • 由于您可以查看eureka web控制台,因此您正在将容器端口与主机端口(均为8761)绑定,并使用访问eureka控制台(您也在对其他容器执行相同操作)
  • 您没有使用任何docker编排工具,而是在EC2虚拟机中单独运行docker
  • 此问题的原因

    基于这些假设,我可以发现在容器中运行时,您的发现客户端应用程序(services/zuul)试图访问该容器的本地主机,而不是您的主机,因为您没有显式指定任何其他eureka URL,因此,它无法在同一容器中找到eureka服务器

    关键是,容器有自己的localhost,当您 从容器中引用localhost并不意味着您是 指主机的本地主机。相反,您的请求仍在尝试访问容器的本地主机。(想象一下这和你的 应用程序(在虚拟机上运行)

    解决方案

    您可以在
    应用程序.yml
    中指定discovery server URL。不是本地主机URL。您可以使用虚拟机的IP或域,也可以使用与访问eureka web控制台相同的地址

    为了管理这两种环境,您可以使用spring概要文件或使用环境变量来设置这些特定于环境的属性

    如果你真的不想看到你的请求离开你的机器,然后又回来,你可以考虑docker DNS。i、 e使用docker时,您可以使用友好的DNS而不是IP。为了实现这一点,请在同一docker网络中运行所有容器,然后可以通过容器名称或主机名相互引用容器