容器ID是192.168.99.100,集群状态正常如下图
java代码用的jediscluster,如下图(宿主机用redis可视化工具可以连接docker中的redis集群!)
然后会报异常
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
网上的方法都试过了,已经弹尽粮绝。请问是我redis集群没搭好吗?还是其他原因,求解?
容器ID是192.168.99.100,集群状态正常如下图
java代码用的jediscluster,如下图(宿主机用redis可视化工具可以连接docker中的redis集群!)
然后会报异常
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
网上的方法都试过了,已经弹尽粮绝。请问是我redis集群没搭好吗?还是其他原因,求解?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答2.4k 阅读✓ 已解决
2 回答3.8k 阅读
我也是碰到这个问题,已经解决。
原因很简单,通过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连就能连上了。