微服务采用docker部署,一般采用net=bridge桥接的模式来进行部署,这样就导致了,跨主机无法访问(本机可以)。原因是桥接模式情况下,docker会自动分配一个地址,该地址和另外主机分配的不是一个网段,导致无法相互访问。

解决方案

1. net设置为host模式

这中方式直接采用主机网络,无法产生网络隔离的效果,但是只要主机之间能够互相访问,各个docker之间就能互相访问。不过这种访问模式貌似并不推荐。

2. 桥接模式下的docker容器互联

这种模式,在互联网上的解决方案比较多,我这里就不多说了。大家可以自行网络查询。

3. 端口映射

在实际的docker部署的过程种我们都会进行和主机的端口映射,然后就可以通过主机的指定端口进行访问了,这里我说的是springcloud微服务下的解决。

我们的服务在向注册中心注册的时候可以指定注册ip,这样就不会自动注册docker容器的ip。举个例子:

我使用的是nacos的注册中心,所以我指定 spring.cloud.nacos.discovery.ip=【指定的ip地址(一般是主机ip)】,这样我注册到注册中心的服务ip就是我指定的ip,进行服务间访问的时候走的就是这个ip,就不会因不同主机之间docker容器ip网段不同无法访问了(各个主机之间互通)。

(eureka好像是 eureka.instance.hostname 我没有测试这个)

这样就轻松解决掉了微服务docker部署跨主机无法互通了。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐