You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:45:27