docker默认是使用bridge的网络环境构建container
由于slave是基于对网络环境的检测来告知master自己的IP,类似地,sentinel是也是这样返回有效的master信息以及向其他sentinel广播自身位置,在docker环境中,这通常会导致slave和sentinel无法正常获取真实或有效的IP地址。
通常是类似如下
172.18.0.?
127.0.0.?
【注意】上述的127.0.0.?是相对于container自身的localhost,而并非宿主机的。即在宿主机中访问127.0.0.?是访问不到反馈出来的地址的
在使用如jedis或redisson进行连接时,常常会出现以下情况:
- 拿到的上述地址在宿主机中是无法连接的
- 正常连接但sentinel之间无法互相发现,即选举/投票机制将会失效
查阅redis的文档
Redis Cluster and Docker
Currently Redis Cluster does not support NATted environments and in general environments where IP addresses or TCP ports are remapped.
Docker uses a technique called port mapping: programs running inside Docker containers may be exposed with a different port compared to the one the program believes to be using. This is useful in order to run multiple