Spring Boot连接Docker Redis非默认端口(6382)出现超时问题求助
解决Spring Boot连接Docker Redis自定义端口6382超时问题
1. 检查Docker容器端口映射配置
Docker容器网络是隔离的,自定义端口必须完成宿主机与容器内端口的映射。注意:容器内Redis默认监听6379端口,你需要将宿主机的6382端口映射到容器内的6379端口:
- 查看现有容器端口映射:
确认PORTS列是否包含docker ps0.0.0.0:6382->6379/tcp - 若未配置映射,重新启动容器(示例容器名为
redis):
若使用Docker Compose,修改docker stop redis && docker rm redis docker run -d --name redis -p 6382:6379 redisdocker-compose.yml的ports字段:services: redis: image: redis ports: - "6382:6379"
2. 验证宿主机端口连通性
先确认宿主机本身能访问6382端口,排除容器外的网络问题:
- 使用telnet测试:
连接成功会进入交互界面,失败则说明端口未开放telnet localhost 6382 - 或使用nc工具:
查看输出是否显示连接成功nc -zv localhost 6382
3. 检查Redis容器内的网络配置
如果启动Redis时挂载了自定义配置文件,需确认:
bind配置项设置为0.0.0.0(或注释掉,允许所有IP访问),避免仅绑定容器内的127.0.0.1导致宿主机无法连接protected-mode设置为no(生产环境建议配合密码认证,而非直接关闭保护模式)
4. 确认Spring Boot配置生效
排查配置是否被正确加载:
- 检查配置文件(
application.properties/application.yml)是否放置在正确路径 - 在启动日志中搜索
redis.port,确认输出值为6382 - 可在代码中注入端口参数验证:
@RestController public class TestController { @Value("${spring.redis.port}") private Integer redisPort; @GetMapping("/redis-port") public String getRedisPort() { return "Redis Port: " + redisPort; } }
5. 排查防火墙/安全组拦截
- 本地环境:检查系统防火墙是否拦截了6382端口的入站请求
- 云服务器:确认安全组规则已开放6382端口的TCP访问
6. 排除RedisConfig类冲突
你的RedisConfig仅自定义了RedisTemplate的序列化规则,不会影响连接参数(RedisConnectionFactory由Spring Boot自动配置,读取spring.redis前缀的属性)。若怀疑配置类有问题,可暂时注释掉@Configuration和@EnableRedisRepositories注解,测试是否能正常连接。
内容的提问来源于stack exchange,提问作者user3586286
相关产品推荐
相关产品推荐

