在Docker中使用Redis设置群集模式(Windows 7)

我正在尝试在集群模式下设置Redis,当我尝试使用Jedis API连接到Redis时,我在下面看到exception。

Exception in thread "main" redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57) at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74) at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116) at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31) at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103) at com.redis.main.Main.main(Main.java:18) 

我正在使用以下命令启动Redis

 $ docker run -v /d/redis.conf:/usr/bin/redis.conf --name myredis redis redis-server /usr/bin/redis.conf 

我简单的redis.conf如下所示。

 port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 

以下是redis启动日志。

 $ docker run -v /d/redis.conf:/usr/bin/redis.conf --name myredis redis redis-se rver /usr/bin/redis.conf 1:C 11 Oct 18:06:01.657 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 11 Oct 18:06:01.663 # Redis version=4.0.2, bits=64, commit=00000000, modifi d=0, pid=1, just started 1:C 11 Oct 18:06:01.664 # Configuration loaded 1:M 11 Oct 18:06:01.685 * Running mode=standalone, port=6379. 1:M 11 Oct 18:06:01.690 # WARNING: The TCP backlog setting of 511 cannot be enf rced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 1:M 11 Oct 18:06:01.692 # Server initialized 1:M 11 Oct 18:06:01.696 # WARNING overcommit_memory is set to 0! Background sav may fail under low memory condition. To fix this issue add 'vm.overcommit_memo y = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overco mit_memory=1' for this to take effect. 1:M 11 Oct 18:06:01.697 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with R dis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain he setting after a reboot. Redis must be restarted after THP is disabled. 1:M 11 Oct 18:06:01.700 * Ready to accept connections 

下面是简单的java程序。

 public class Main { public static void main(String[] args) { Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6379)); JedisCluster jc = new JedisCluster(jedisClusterNodes); //Jedis jc = new Jedis("192.168.99.100"); jc.set("prime", "1 is prime"); String keyVal = jc.get("prime"); System.out.println(keyVal); } } 

不知道这里发生了什么问题,并会感激这方面的帮助。

启动redis容器时需要暴露端口

 docker run -v /d/redis.conf:/usr/bin/redis.conf -p 6379:6379 --name myredis redis redis-server /usr/bin/redis.conf