【问题标题】:Not able to connect to redis cluster from docker container无法从 docker 容器连接到 redis 集群
【发布时间】:2020-06-07 00:43:35
【问题描述】:

我正在尝试设置 Redis 集群。配置是集群的最低配置。我正在使用 docker-compose 来运行我的应用程序。但它总是抛出以下错误。但是,当我将 Redis 连接到外部工具时,它会成功连接。

ClusterAllFailedError: Failed to refresh slots cache

const db = new Redis.Cluster([{
    host: "redis",
    port: 6379
}]) 

我可以在 docker 容器上看到 Redis 主实例和副本实例

主人

container ID - 8a7f4d9fc877        
image - bitnami/redis:latest          
ports - 0.0.0.0:32862->6379/tcp                          
name - mogus_redis_1

奴隶

container ID - f04433e04de5        
image - bitnami/redis:latest          
ports - 0.0.0.0:32863->6379/tcp                          
name - mogus_redis-replica_1

yml 文件

redis:
    image: "bitnami/redis:latest"
    ports:
    - 6379
    environment:
      REDIS_REPLICATION_MODE: master
      ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
    - redis-data:/bitnami

  redis-replica:
    image: "bitnami/redis:latest"
    ports:
    - 6379
    depends_on:
    - redis
    environment:
      REDIS_REPLICATION_MODE: slave
      REDIS_MASTER_HOST: redis
      REDIS_MASTER_PORT_NUMBER: 6379
      ALLOW_EMPTY_PASSWORD: "yes"

【问题讨论】:

  • 该应用程序也是docker-compose 文件的一部分吗?
  • 是的应用程序是 docker compose 的一部分
  • 您应该将其添加到问题中的yml,它可能与正在发生的事情有关。

标签: docker redis


【解决方案1】:

您没有使用 Redis 集群,只是一个主服务器和一个副本。在这种情况下,您的应用程序应该只使用单实例类,我假设它是这样的:

const db = new Redis([{
    host: "redis",
    port: 6379
}])

【讨论】:

  • 即使我将副本主机和端口提供给集群设置它也不会工作
  • 嗨@Jitender 你有没有找到解决上述问题的方法。我也遇到了同样的错误。