是這樣的,eureka、gateway和普通的微服務在本地是OK的,
部署到docker后,通過gateway訪問某個微服務就報錯了。
用的是serviceId的方式,在eureka界面也能看到各個微服務都是在線的,沒有問題,但就是通過gateway的路由訪問時會報錯。
解決方案如下:
在微服務里加上這個配置:
eureka: instance: prefer-ip-address: true
然后就OK了
估計是加上后,就把ip注冊到eureka了,不加的話我看過eureka注冊界面,是以docker容器的container id注冊過去的,譬如container id為abcde,那么當訪問該微服務時,eureka以http://abcde/xxx,去訪問的,當然是訪問不到該服務。配置上面的選項后,就會以內網ip加端口去訪問就能訪問到了。
那么為什么在本地環境是可以的呢?因為本地環境是localhost注冊過去的,各個服務都能解析localhost,而docker不行,每一個docker都是獨立的,把docker的container id注冊過去,別的微服務是不認識的。