Spring Boot Cloud Euroka Windows 10 Eurokea返回HOST.DOCKER.DOC



春季启动云发现问题,docker在Windows 10上升级后与Eureka HostName的问题。

摘要

  • 我正在Windows 10 Enterpise上开发,最新补丁
  • Java 8
  • STS 4
  • Docker接待Mariadb,RabbitMQ和Zipkin(无服务运行Docker(
  • 使用基于Eureka的Spring Boot Cloud Discovery for服务发现

docker升级之后,直到今天更新码头更新

,一切都很好。

eureka返回" host.docker.internal"作为我的开发框的主机名(机器主机托管启动云服务(

这一直工作正常,直到今天在Windows 10上的Docker Updgrade。

对此有什么指导?

态-------------

"

-------------------春季版本------------

buildscript {
    ext {
        springCloudVersion = "Greenwich.SR1"
        springBootVersion = "2.1.5.RELEASE"
        springRetryVersion = "1.2.4.RELEASE"
        lombokVersion = "3.6.4"
        mySqlConnectorVersion = "8.0.15"
        springBootAdminVersion = "2.1.5"
    }

我正在使用Windows 10 Enterprise进行Java开发。

我使用Docker-Compose在我的Windows 10 Box上的Dev Env中托管Mariadb,Zipkin和RabbitMQ

我有一个带有8个弹簧启动云服务

的多项目的Gradle构建

其中一项服务是托管Eureke

的弹簧云发现服务

其他Spring Cloud Services是Eureka客户。

直到今天,一切都起作用1(Eureka Spring Boot Cloud Services首先开始2(其他春季启动云服务是Eclipse启动的客户端,注册并查询弹簧云发现客户端代码,以获取其他服务的URL

今天,最新的Windows 10码头被推出了,我安装了它(我一直在通过其他几个Docker更新开发此应用程序(。

我更新了Docker,重新启动。

重新启动后,eureka服务器将" host.docker.internal"返回为url中的主机名,而不是http:/mymarachinename:8080

我在升级之前没有网络数据,但是现在是

U:>ipconfig
Windows IP Configuration

Ethernet adapter vEthernet (DockerNAT):
   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 10.0.75.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
Ethernet adapter Ethernet:
   Connection-specific DNS Suffix  . : net.FOO.BAR.com
   IPv4 Address. . . . . . . . . . . : 146.122.145.71
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 146.122.145.1
Ethernet adapter vEthernet (Default Switch):
   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 172.28.74.49
   Subnet Mask . . . . . . . . . . . : 255.255.255.240
   Default Gateway . . . . . . . . . :

我的client application.properties文件是:

eureka.client.serviceUrl.defaultZone= http://${ci2.srvhost}:8761/eureka/
eureka.instance.hostname=${ci2.srvhost}
spring.cloud.client.hostname=${ci2.srvhost}

服务器应用程序.property文件

server.port=8761

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF

Standard reboot after docker updated

The expected URL from discovery is
http://mymachine:8091
returned value after docker upgrade
http://host.docker.internal:8091

我面临着类似的问题,尤里卡服务器正在host.docker.internal.internal而不是localhost注册服务。

在我的情况下,问题是位置C: Windows System32 drivers etc et hosts的一个更改的主机文件。我删除了主机文件中的所有行,并使用具有管理员特权的NPP保存。重新启动服务器发布此更改。

看起来'docker桌面'正在更改hostfile。

it application.properties文件的每个eureka client,我添加/更改了

-----------------------------------------------------------

......
ci2.srvhost = my hostname
#to find this list,run ipconfig in command prompt
spring.cloud.inetutils.preferredNetworks=146.122,10.0
eureka.client.serviceUrl.defaultZone= http://${ci2.srvhost}:8761/eureka/
eureka.instance.hostname=${ci2.srvhost}
spring.cloud.client.hostname=${ci2.srvhost}

------------------------------------------------------------------------------------------------------------------P>

# host to set of ci2 services
ci2.srvhost = ${COMPUTERNAME}

# on windows 10 boxes, running docker, we have to include preferred networks, 
# this is not needed on linux, or windows boxes not running docker
spring.cloud.inetutils.preferredNetworks=146.122,10.0

--------------------------标准配置,不需要更改以下----------------------------------- -

server.port=8761

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=${ci2.srvhost}
eureka.instance.prefer-ip-address=true
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF
serviceUrl.defaultZone= http://${eureka.instance.hostname}:${server.port}/eureka/

感谢Windows上主机文件上的提示

我发现docker在host.docker.internal和gateway.docker.internal.internal.internal.intern.intern.intern.intern.intern.intern.intern。

中添加了别名。

我猜Eureka从IP和host.docker.internal返回了主机查找。

我不是主机文件的专家,但是我在IP中添加了一个实际主机名的别名(注意:我们使用静态IP(。执行此操作后,Docker没有在重新启动上更改我的主机文件,而IP->主机的反向查找现在返回我的机器名称而不是host.docker.internal

------------------ modified hosts file for windows
#I added an alias from my machine name to the IP before the docker added aliases
#
146.122.145.71 mymachine.net.foo.com
# Added by Docker Desktop
146.122.145.71 host.docker.internal
146.122.145.71 gateway.docker.internal

窗口10的解决方案:您不必从主机文件中删除所有行。如果存在(#192.168.1.4 host.docker.internal(,只需评论此问题(在与Docker一起玩时我们会使用它(并粘贴此(127.0.0.1 host.docker.internal(它对我有用。

"消息":"连接拒绝:没有更多信息:host.docker.internal.internal in eureka Gateway错误

分辨率:

检查ping host.docker.internal响应是一些IP地址,分开本地主机I,E 127.0.0.1删除C: Windows System32 drivers etc hosts.file条目,使其为空

然后重新启动Eureka和您的微服务实例。

还会在日志中找到如下所示的消息,确保您在eureka中注册

DiscoveryClient_Beer-Service/Desktop-G2Aigg1:啤酒服务:拆分上述日志消息,该消息表示Discovery客户端啤酒服务是我的服务桌面G2AIGG1是我的PC名称啤酒服务是注册的服务。

也面临着类似的问题。问题在于 Avast Premium Security 。尝试禁用Avast 防火墙服务。

使用禁用的防火墙eureka在 host.internal hosts 文件中使用 host.internal

我在加载我的rettemplate时也面临着同样的问题。像这样的东西

@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();}

这是因为色带客户端。因此,当我删除此代码并使用RestTemplateBuilder获取RESTTEMPLATE时,无需对主机文件进行任何更改,一切正常。代码示例:

@Autowired
private RestTemplateBuilder restTemplateBuilder;
RestTemplate restTemplate = restTemplateBuilder.build();

您也可以尝试此方法。

相关内容

最新更新