spring boot cloud eureka windows 10 eureka returns host.docker.internal for client host name after latest docker upgrade
spring boot cloud eurka windows 10 eurkea returns host.docker.internal for client host name after latest docker upgrade
Spring 启动云发现问题,docker 在 windows 10 上升级后 Eureka 主机名出现问题。(注意:docker 未托管 spring服务,仅 mariadb、rabbitmq 和 zipkin)
总结
- 我正在开发 windows 10 enterpise,最新补丁
- java 8
- sts 4
- docker 托管 mariadb、rabbitmq 和 zipkin(无服务 运行
docker)
- 使用spring基于Eureka的启动云发现
服务发现
在 docker 升级
之后,今天 docker 更新之前一切正常
Eureka returns "host.docker.internal" 作为我的开发箱的主机名(托管 spring 启动云服务的机器)
在今天 windows 10 的 docker 升级之前一直运行良好。
有这方面的指导吗?
---------------------------- 详情------------ --------------
---------------- spring 的版本 ----------
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 个企业进行 java 开发。
我在 windows 10 box
的开发环境中使用 docker-compose 托管 mariadb、zipkin 和 rabbitmq
我有一个多项目 gradle 构建有 8 个 spring 启动云服务
其中一项服务是托管 Eureke
的 spring 云发现服务
其他 spring 云服务是尤里卡客户端。
直到今天,一切正常
1)Eureka spring boot云服务先启动
2) 其他spring启动云服务是eclipse启动的客户端,注册并查询spring云发现客户端代码,获取其他服务URL
今天,windows 10 的最新 docker 推出了,我安装了它(我一直在通过其他几个 docker 更新开发这个应用程序)。
我更新了 docker,重新启动了。
重启后,Eureka 服务器返回 "host.docker.internal" 作为 URL 中的主机名,而不是 http:/mymachinename: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 . . . . . . . . . :
我的客户 application.properties 文件是:
eureka.client.serviceUrl.defaultZone= http://${ci2.srvhost}:8761/eureka/
eureka.instance.hostname=${ci2.srvhost}
spring.cloud.client.hostname=${ci2.srvhost}
服务器application.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
它是每个 eureka 客户端的 application.properties 文件,我 added/changed
--------------------客户
......
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}
--------------------尤里卡服务器application.property-------------------- --
# 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/
我遇到了一个类似的问题,即尤里卡服务器在 host.docker.internal 而不是本地主机上注册服务。
我的问题是位置 C:\Windows\System32\Drivers\etc\hosts 的主机文件发生了更改。我删除了主机文件中的所有行,并使用具有管理员权限的 npp 将其保存。重新启动服务器 post 此更改。
看起来 'Docker Desktop' 正在更改主机文件。
"message": "连接被拒绝: 没有更多信息: host.docker.internal in eureka gateway error
分辨率:
检查 ping host.docker.internal
响应是除本地主机 i,e 127.0.0.1 之外的一些 IP 地址
删除 C:\Windows\System32\Drivers\etc\hosts.file 条目,将其清空
然后重启 eureka 和你的微服务实例。
还会在日志中找到如下消息,这确保您已在 eureka 中注册
DiscoveryClient_BEER-SERVICE/DESKTOP-G2AIGG1:啤酒服务:
拆分上面的日志消息,表示发现客户端
啤酒服务是我的服务
DESKTOP-G2AIGG1 是我的电脑名称
beer-service 是注册的服务。
当我对 restTemplate 进行负载平衡时,我也遇到了同样的问题。像这样
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();}
这是因为功能区客户端。
因此,在不对主机文件进行任何更改的情况下,当我删除此代码并使用 RestTemplateBuilder
获取 restTemplate 时,一切正常。代码示例:
@Autowired
private RestTemplateBuilder restTemplateBuilder;
RestTemplate restTemplate = restTemplateBuilder.build();
你也可以试试这个方法。
感谢 windows
上主机文件的提示
我发现 docker 在主机文件中为 host.docker.internal 和 gateway.docker.internal 添加了别名。
我猜测 Eureka 从 IP 进行主机查找并返回 host.docker.internal。
我不是主机文件方面的专家,但我为我的 IP 添加了一个实际主机名的别名(注意:我们使用静态 IP)。这样做之后,docker 没有在重新启动时更改我的主机文件,并且 ip->host 的反向查找现在 returns 我的机器名称而不是 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
Window10 的解决方案:
您不必从主机文件中删除所有行。
如果存在就评论这个(#192.168.1.4 host.docker.internal)(因为我们在玩 docker 时使用它)
并粘贴此 (127.0.0.1 host.docker.internal)
它对我有用。
也遇到了类似的问题。问题出在 Avast Premium Security 中。尝试禁用 Avast Firewall 服务。
在禁用防火墙的情况下,Eureka 在 hosts 文件中与 host.docker.internal 一起正常工作。
Spring 启动云发现问题,docker 在 windows 10 上升级后 Eureka 主机名出现问题。(注意:docker 未托管 spring服务,仅 mariadb、rabbitmq 和 zipkin)
总结
- 我正在开发 windows 10 enterpise,最新补丁
- java 8
- sts 4
- docker 托管 mariadb、rabbitmq 和 zipkin(无服务 运行 docker)
- 使用spring基于Eureka的启动云发现 服务发现
在 docker 升级
之后,今天 docker 更新之前一切正常Eureka returns "host.docker.internal" 作为我的开发箱的主机名(托管 spring 启动云服务的机器)
在今天 windows 10 的 docker 升级之前一直运行良好。
有这方面的指导吗?
---------------------------- 详情------------ --------------
---------------- spring 的版本 ----------
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 个企业进行 java 开发。
我在 windows 10 box
的开发环境中使用 docker-compose 托管 mariadb、zipkin 和 rabbitmq我有一个多项目 gradle 构建有 8 个 spring 启动云服务
其中一项服务是托管 Eureke
的 spring 云发现服务其他 spring 云服务是尤里卡客户端。
直到今天,一切正常 1)Eureka spring boot云服务先启动 2) 其他spring启动云服务是eclipse启动的客户端,注册并查询spring云发现客户端代码,获取其他服务URL
今天,windows 10 的最新 docker 推出了,我安装了它(我一直在通过其他几个 docker 更新开发这个应用程序)。
我更新了 docker,重新启动了。
重启后,Eureka 服务器返回 "host.docker.internal" 作为 URL 中的主机名,而不是 http:/mymachinename: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 . . . . . . . . . :
我的客户 application.properties 文件是:
eureka.client.serviceUrl.defaultZone= http://${ci2.srvhost}:8761/eureka/
eureka.instance.hostname=${ci2.srvhost}
spring.cloud.client.hostname=${ci2.srvhost}
服务器application.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
它是每个 eureka 客户端的 application.properties 文件,我 added/changed
--------------------客户
......
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}
--------------------尤里卡服务器application.property-------------------- --
# 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/
我遇到了一个类似的问题,即尤里卡服务器在 host.docker.internal 而不是本地主机上注册服务。
我的问题是位置 C:\Windows\System32\Drivers\etc\hosts 的主机文件发生了更改。我删除了主机文件中的所有行,并使用具有管理员权限的 npp 将其保存。重新启动服务器 post 此更改。
看起来 'Docker Desktop' 正在更改主机文件。
"message": "连接被拒绝: 没有更多信息: host.docker.internal in eureka gateway error
分辨率:
检查 ping host.docker.internal 响应是除本地主机 i,e 127.0.0.1 之外的一些 IP 地址 删除 C:\Windows\System32\Drivers\etc\hosts.file 条目,将其清空
然后重启 eureka 和你的微服务实例。
还会在日志中找到如下消息,这确保您已在 eureka 中注册
DiscoveryClient_BEER-SERVICE/DESKTOP-G2AIGG1:啤酒服务: 拆分上面的日志消息,表示发现客户端 啤酒服务是我的服务 DESKTOP-G2AIGG1 是我的电脑名称 beer-service 是注册的服务。
当我对 restTemplate 进行负载平衡时,我也遇到了同样的问题。像这样
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();}
这是因为功能区客户端。
因此,在不对主机文件进行任何更改的情况下,当我删除此代码并使用 RestTemplateBuilder
获取 restTemplate 时,一切正常。代码示例:
@Autowired
private RestTemplateBuilder restTemplateBuilder;
RestTemplate restTemplate = restTemplateBuilder.build();
你也可以试试这个方法。
感谢 windows
上主机文件的提示我发现 docker 在主机文件中为 host.docker.internal 和 gateway.docker.internal 添加了别名。
我猜测 Eureka 从 IP 进行主机查找并返回 host.docker.internal。
我不是主机文件方面的专家,但我为我的 IP 添加了一个实际主机名的别名(注意:我们使用静态 IP)。这样做之后,docker 没有在重新启动时更改我的主机文件,并且 ip->host 的反向查找现在 returns 我的机器名称而不是 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
Window10 的解决方案: 您不必从主机文件中删除所有行。 如果存在就评论这个(#192.168.1.4 host.docker.internal)(因为我们在玩 docker 时使用它) 并粘贴此 (127.0.0.1 host.docker.internal) 它对我有用。
也遇到了类似的问题。问题出在 Avast Premium Security 中。尝试禁用 Avast Firewall 服务。
在禁用防火墙的情况下,Eureka 在 hosts 文件中与 host.docker.internal 一起正常工作。