Spring Boot结合Docker部署时无法连接Redis的问题求助
Spring Boot结合Docker部署时无法连接Redis的问题求助
大家好,我最近在尝试用Docker Compose部署我的Spring Boot微服务应用,其中Redis的连接环节一直有问题,而且没法获取到有效的日志来定位到底哪里出错了,想请各位帮忙排查下。
先给大家展示下相关的配置和代码:
Docker Compose 配置
我的docker-compose.yml里Redis和user-service的核心配置如下:
version: '3.8' services: redis: image: redis:7.2-alpine ports: - "6379:6379" networks: - simtrade-network # 省略timescaledb、builder等其他服务配置 user-service: build: context: . dockerfile: user_service/Dockerfile depends_on: builder: condition: service_completed_successfully ports: - "8081:8080" volumes: - ./user_service/src/main:/app/src/main - ./user_service/target/classes:/app/target/classes environment: - SPRING_DEVTOOLS_RESTART_ENABLED=true - SPRING_REDIS_DATA_HOST=redis - SPRING_REDIS_DATA_PORT=6379 # 省略其他数据源、JWT等环境变量 networks: - simtrade-network
Spring Boot 应用配置
user-service的application.yml中Redis相关配置:
spring: application: name: user-service # 省略数据源等其他配置 data: redis: host: redis # 也试过localhost,结果完全一样 port: 6379
Redis 自定义配置类
我编写了Redis的配置类来适配Docker环境:
package com.simtrade.common.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; @Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { return lettuceConnectionFactory(); } @Bean public RedisTemplate<String, String> redisTemplate() { RedisTemplate<String, String> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); return template; } @Value("${spring.data.redis.host}") private String hostName; @Value("${spring.data.redis.port}") private int port; @Bean public LettuceConnectionFactory lettuceConnectionFactory() { // 注释里特意标注了必须配置这个才能在Docker中正常工作 RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(hostName); redisStandaloneConfiguration.setPort(port); return new LettuceConnectionFactory(redisStandaloneConfiguration); } }
测试Redis连接的业务代码
我在接口对应的业务函数里加了一段测试代码,用来验证Redis连接:
// 获取用户排行榜及周边排名 public Map<String, Object> getUserRank(Long userId, String leaderboardType) { try { redisTemplate.opsForValue().set("test-key", "test-value", 5); System.out.println("✅ Redis connection successful."); } catch (Exception e) { System.err.println("❌ Redis connection failed: " + e.getMessage()); e.printStackTrace(); } // 后续排行榜核心逻辑代码 String key = String.format(LEADERBOARD_KEY, leaderboardType); ZSetOperations<String, String> zSetOps = redisTemplate.opsForZSet(); Long rank = zSetOps.reverseRank(key, userId.toString()); if (rank == null) { throw new IllegalArgumentException("User not found in leaderboard"); } // ... 省略其他业务代码 }
问题现象
当我调用这个接口时,控制台既没有输出✅ Redis connection successful.,也没有输出任何错误栈信息,完全不知道Redis连接环节到底是成功还是失败,也没法进一步排查问题。Docker Compose里Redis服务已经正常启动,user-service也配置了依赖Redis启动完成,而且Redis的Host用的是Docker服务名redis(也试过localhost,结果一致),端口也是默认的6379,看起来配置都没问题,但就是没法和Redis正常交互。
有没有朋友遇到过类似的问题?或者能帮我看看哪里配置疏漏了吗?
内容来源于stack exchange
相关产品推荐
相关产品推荐

