是这样的,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注册过去,别的微服务是不认识的。