簡體   English   中英

spring 啟動雲 eurka windows 10 eurkea 在最新的 docker 升級后返回 host.docker.internal 作為客戶端主機名

[英]spring boot cloud eurka windows 10 eurkea returns host.docker.internal for client host name after latest docker upgrade

Spring 引導雲發現問題,在 windows 10 上升級 docker 后 Eureka 主機名出現問題。(注意:docker 不托管 spring 服務,僅托管 mariadb、88580zip6 和 8838kin)

概括

  • 我正在開發 windows 10 enterpise,最新補丁
  • java 8
  • 4級
  • docker 托管 mariadb、rabbitmq 和 zipkin(沒有服務運行 docker)
  • 使用基於Eureka的spring啟動雲發現進行服務發現

一切正常,直到今天 docker 更新,在 docker 升級之后

Eureka 返回“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 開發。

我使用 docker-compose 在我的 windows 10 盒子上的開發環境中托管 mariadb、zipkin 和 rabbitmq

我有一個多項目 gradle 構建 8 spring 啟動雲服務

其中一項服務是托管 Eureke 的 spring 雲發現服務

其他spring個雲服務是eureka客戶端。

直到今天,一切正常 1)Eureka spring啟動雲服務先啟動 2)其他spring啟動雲服務是eclipse啟動的客戶端,注冊查詢spring雲發現客戶端代碼,獲取其他服務的URL

今天,最新的 docker for windows 10 推出了,我安裝了它(我一直在通過其他幾個 docker 更新開發這個應用程序)。

我更新了 docker,重新啟動。

重啟后,Eureka 服務器返回“host.docker.internal”作為 URL 中的主機名,而不是 http:/mymachinename:8080

升級前沒有.network數據,現在有了

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

我遇到了類似的問題,尤里卡服務器在 host.docker.internal 而不是 localhost 上注冊服務。

我的問題是在 C:\\Windows\\System32\\Drivers\\etc\\hosts 位置更改了主機文件。 我刪除了主機文件中的所有行,並使用具有管理員權限的 npp 保存它。 重新啟動服務器發布此更改。

看起來“Docker Desktop”正在更改主機文件。

它是每個尤里卡客戶端的 application.properties 文件,我添加/更改

- - - - - - - - - 客戶

......

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/

感謝有關 Windows 主機文件的提示

我發現 docker 在主機文件中為 host.docker.internal 和 gateway.docker.internal 添加了別名。

我猜 Eureka 從 IP 進行主機查找並返回 host.docker.internal 。

我不是主機文件方面的專家,但我為我的實際主機名添加了一個別名到我的 IP(注意:我們使用靜態 ip)。 執行此操作后,docker 在重新啟動時沒有更改我的主機文件,並且 ip->host 的反向查找現在返回我的機器名稱而不是 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

Window 10 的解決方案:您不必從主機文件中刪除所有行。 如果存在就評論這個(#192.168.1.4 host.docker.internal)(因為我們在玩docker時使用這個)並粘貼這個(127.0.0.1 host.docker.internal)它對我有用。

“消息”:“連接被拒絕:沒有更多信息:尤里卡網關錯誤中的host.docker.internal

解析度:

檢查 ping host.docker.internal 響應是除本地主機之外的一些 ip 地址,即 127.0.0.1 刪除 C:\\Windows\\System32\\Drivers\\etc\\hosts.file 條目,使其為空

然后重新啟動 eureka 和您的微服務實例。

還會在日志中找到如下消息,這確保您已在尤里卡注冊

DiscoveryClient_BEER-SERVICE/DESKTOP-G2AIGG1:beer-service:拆分上面的日志消息,表示發現客戶端 BEER-SERVICE 是我的服務,DESKTOP-G2AIGG1 是我的電腦名稱 beer-service 是注冊的服務。

當我對 restTemplate 進行負載平衡時,我也面臨着同樣的問題。 像這樣的東西

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

這是因為功能區客戶端。 因此,在沒有對主機文件進行任何更改的情況下,當我刪除此代碼並使用RestTemplateBuilder獲取 restTemplate 時,一切正常。 代碼示例:

@Autowired
private RestTemplateBuilder restTemplateBuilder;

RestTemplate restTemplate = restTemplateBuilder.build();

您也可以嘗試這種方法。

也面臨着類似的問題。 問題出在Avast Premium Security中。 嘗試禁用 Avast防火牆服務。

在禁用防火牆的情況下,Eureka 可以在主機文件中使用host.docker.internal正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM