在宿主机的springboot项目访问docker中的redis集群出错

PangHuan
  • 50

容器ID是192.168.99.100,集群状态正常如下图

clipboard.png
java代码用的jediscluster,如下图(宿主机用redis可视化工具可以连接docker中的redis集群!)

clipboard.png

然后会报异常

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

网上的方法都试过了,已经弹尽粮绝。请问是我redis集群没搭好吗?还是其他原因,求解?

回复
阅读 5k
5 个回答

我也是碰到这个问题,已经解决。
原因很简单,通过debug发现jedis直接连接的172网段ip,因为docker默认采用的桥接方式,桥接到docker0虚拟网卡,它就是172的,从你第一个图也能看出来。jedis首先连接上一个196,然后直接获取到它所在集群的node的信息,而node如果是内网的话,node信息是会写172而不是写196,这样死活就连接不上了。

解决方法是采用主机共享ip方式启动docker,就好像vmware从虚拟网卡分配的ip变为和物理机器共享ip一样。

如果是docker run,加--net=host
如果是docker-compose,在配置文件增加net: host
然后删除所有数据卷里面的node文件,重启docker镜像,重新构建集群,这时候第一张图应该全部是196网段的ip,再用jedis连就能连上了。

docker 默认是桥接。
docker集群的网段是172.18
jediscluster中应该也配置这个网段ip+端口。
如果你做了端口映射,也没看到时你端口映射的截图。

周宇
  • 3
新手上路,请多包涵

能贴一下docker下的Redis集群怎么搭建的吗?包括配置文件

宣传栏