本地运行的SpringBoot应用无法连接Docker部署的Redis报错求助
问题根因
你遇到的报错java.net.UnknownHostException: redis: nodename nor servname provided, or not known是典型的主机名解析失败问题:
你配置的spring.redis.host=redis这个主机名,只有当Spring Boot应用和Redis容器运行在同一个Docker网络下时,Docker内置的DNS服务才能将redis这个服务名解析为对应Redis容器的IP地址。但你当前Spring Boot是直接运行在本地宿主机上的,本地操作系统没有绑定redis主机名到对应IP的映射规则,自然无法解析。
本地运行Spring Boot对接Docker部署的Redis是完全可行的,按以下步骤调整即可:
解决步骤
确认Redis容器端口映射正确
启动Redis容器时必须添加宿主机到容器的端口映射,正确启动命令参考:docker run -d -p 6379:6379 --name redis redis:latest确保
-p 6379:6379参数已配置,将容器的6379端口映射到宿主机的6379端口。修改Spring Boot配置
将application.properties里的Redis主机地址改为宿主机本地地址:# 把原来的spring.redis.host=redis改成下面的配置 spring.redis.host=localhost异常排查(修改后仍无法连接时检查)
- 执行
docker ps确认Redis容器处于运行状态,没有异常退出 - 本地执行
redis-cli ping验证Redis服务可正常访问,正常会返回PONG - 如果你启动Redis时配置了访问密码,需要在配置文件中补充密码配置:
spring.redis.password=你设置的Redis密码
- 执行
补充说明
如果你后续将Spring Boot应用也打包为Docker镜像,和Redis容器统一用Docker Compose编排部署、放在同一个Docker网络下时,可以直接用spring.redis.host=redis的配置,不需要修改为localhost。
内容的提问来源于stack exchange,提问作者Owolabi Ezekiel Tobiloba
相关产品推荐
相关产品推荐

