Spring Boot Redis 使用 Redis 时出现连接被拒绝异常
Posted
技术标签:
【中文标题】Spring Boot Redis 使用 Redis 时出现连接被拒绝异常【英文标题】:Spring Boot Redis getting connection refused exception when using Redis 【发布时间】:2019-01-20 12:06:19 【问题描述】:我有一个小型应用程序,我使用 redis 进行缓存和 Spring Boot。应用程序在本地成功运行,但是当我尝试对其进行 dockerize 时,我收到连接拒绝异常。
这是我的 docker-compose.yml 文件:
version: '3.5'
services:
my-application:
image: my-application:latest
container_name: my-application
ports:
- 8080:8080
hostname: my-application
redis:
image: redis
command: [ "redis-server", "--protected-mode", "no" ]
volumes:
- ./data:/data
ports:
- 6379:6379
Dockerfile:
FROM openjdk:7
VOLUME /tmp
ADD my-application-0.0.1.jar my-application-0.0.1.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "my-application-0.0.1.jar"]
当我查看 docker 控制台时,我看到 redis 以独立模式启动
我错过了什么?
谢谢
【问题讨论】:
【参考方案1】:你必须设置:
server.address=0.0.0.0
在您的application.properties
中。如果您的应用程序正在侦听容器中的 127.0.0.1
,您将无法从主机访问它。
【讨论】:
【参考方案2】:需要将redis主机改成docker compose文件中redis配置的名称,本例为-redis
可以通过两种方式配置:
更改属性文件spring.redis.host=redis 在手动配置中设置主机(redis 或 jedis)redisStandaloneConfiguration.setHostName("redis");
另外,就我而言,我没有在我的 docker 文件中使用卷,所以要使用新的 jar 文件,您需要执行启动 docker compose 的所有 3 个步骤(除了在 gradle 中进行干净构建或干净安装在 Maven 中):
docker-compose down docker-compose 构建 码头工人组成我希望这对某人有用! :)
【讨论】:
【参考方案3】:我遇到了同样的问题并用 (docker-compose.yml) 修复了
cache:
image: redis
...
ports:
- 6379:6379
然后在 application.properties spring.redis.host=cache
最终
@Value("$spring.redis.host")
String redisHost
...
redisStandaloneConfiguration.setHostName(redisHost);
我认为,在 docker 网络中,具有相同图像名称的服务名称会导致问题并以 docker 无法创建与 redis 主机的连接而告终。
【讨论】:
以上是关于Spring Boot Redis 使用 Redis 时出现连接被拒绝异常的主要内容,如果未能解决你的问题,请参考以下文章
聊聊spring-boot-starter-data-redis的配置变更
如何基于 Spring Boot 框架配置 JedisConnectionFactory 的超时时间
spring boot:Spring Boot中Redis的使用