无法连接到我本地 Spring Boot 中在 docker 上运行的 redis sentinel

Posted

技术标签:

【中文标题】无法连接到我本地 Spring Boot 中在 docker 上运行的 redis sentinel【英文标题】:Unable to connect to redis sentinel running on docker in my local Spring boot 【发布时间】:2020-07-08 10:24:17 【问题描述】:

我正在使用 Spring boot 2.2.5 和 Spring data redis 和 bitnami/redis-sentinel 哨兵码头图像。

bitnami/redis-sentinel docker 镜像与 docker compose 配合使用。

我可以使用 redis-cli 连接到 redis。 (cli 显示 127.0.0.1:6379 已连接)

但在我本地的 Spring Boot 应用程序中,它不起作用。 错误跟踪如下:

org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 172.28.0.2:6379
at org.springframework.data.redis.connection.lettuce.LettucePoolingConnectionProvider.getConnection(LettucePoolingConnectionProvider.java:109) ~[spring-data-redis-2.2.5.RELEASE.jar:2.2.5.RELEASE]

Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to 172.28.0.2:6379
    at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.2.2.RELEASE.jar:5.2.2.RELEASE]

Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: /172.28.0.2:6379
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:261) ~[netty-transport-4.1.45.Final.jar:4.1.45.Final]

IP地址172.28.0.2是docker镜像中的redis master ip。

我的哨兵主机配置如下, 127.0.0.1:26379,127.0.0.1:26379,127.0.0.1:26379

我猜我的应用程序通过 localhost sentinel 配置很好地获取了主信息。

那为什么我的应用程序为 master 找到 172.28.0.2:6379 而不是 127.0.0.1:6379?

我是否需要更改该 docker 映像中的地址,或者我是否也应该在 docker 上运行我的应用程序?

任何帮助将不胜感激!

【问题讨论】:

你使用 docker-compose 吗?如果是的话,你能显示你的 docker-compose 文件吗? 是的,我刚刚附上了我的答案。谢谢。 【参考方案1】:

我刚刚通过在 docker-compose 的环境中添加 REDIS_MASTER_HOST=127.0.0.1(最初是“redis”)解决了我的问题。 我发现在运行容器的 redis-sentinel.conf 中为监视器 reids master 设置了 172.28.0.2 6379 并且它没有随着容器名称“redis”而改变。

之后,我的带有 lettuce 客户端的 springb boot 应用程序可以在本地机器上毫无问题地连接到 redis。

【讨论】:

以上是关于无法连接到我本地 Spring Boot 中在 docker 上运行的 redis sentinel的主要内容,如果未能解决你的问题,请参考以下文章

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关

无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres db

无法从Spring Boot Docker容器连接到本地MySQL数据库服务器

Spring boot JDBC无法连接到docker容器中的mysql

Docker:无法连接到弹性搜索表单spring boot docker image

无法从 Spring Boot 应用程序连接到 Bigtable