无法使用docker compose连接redis和springboot

问题描述 投票:0回答:1

我想将 fcm 令牌保存在 Redis 中,但我得到,无法连接到 Redis(RedisConnectionFailureException)。 springboot 容器无法与 redis 容器通信。

server.port=9000
spring.redis.host=redis
spring.redis.port=6379

docker 撰写

version: "3"
services: 
  spring-boot-app:
    build:
      context: .
      dockerfile: Dockerfile
    image: imageone
    container_name: imageone_container
    networks:
      - my_network
    ports:
      - "9000:9000"
    depends_on:
      - redis
    environment:      
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
  redis:
    image: redis
    container_name: redis_container
    networks:
      - my_network
    ports:
      - "6379:6379"
networks:
  my_network:
    driver: bridge

依赖关系

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

控制器

@PostMapping("/fcm-token")
public String verifyTokenGetMethod(@RequestBody Map<String, String> token) {
try { redisTemplate.opsForValue().set("fcmToken", token.get("fcmToken"));
            return "Fcm token saved successfully";
        } catch (Exception e) {e.printStackTrace();return "Fcm token not saved";
        } }
spring-boot docker docker-compose redis
1个回答
0
投票

假设您的项目如下所示:

├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── demo
        │               ├── config
        │               │   └── RedisConnectionCheck.java
        │               └── DemoApplication.java
        └── resources
            └── application.properties

application.properties
的内容如问题中所指定。

🗎

Dockerfile

FROM maven:3.6.3-openjdk-11-slim AS build

WORKDIR /home/app

COPY src src
COPY pom.xml /home/app

RUN mvn clean package -DskipTests

FROM openjdk:11-jre-slim

COPY --from=build /home/app/target/spring-boot-app-0.0.1-SNAPSHOT.jar /usr/local/lib/spring-boot-app.jar

EXPOSE 9000

ENTRYPOINT ["java","-jar","/usr/local/lib/spring-boot-app.jar"]

🗎

docker-compose.yml

version: "3"
services:
  spring-boot-app:
    build:
      context: .
      dockerfile: Dockerfile
    image: imageone
    ports:
      - "9000:9000"
    depends_on:
      - redis
    environment:
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
  redis:
    image: redis
    ports:
      - "6379:6379"

🗎

RedisConnectionCheck.java

package com.example.demo.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisConnectionCheck implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(RedisConnectionCheck.class);

    @Value("${spring.redis.host}")
    private String redisHost;
    @Value("${spring.redis.port}")
    private int redisPort;

    private final StringRedisTemplate redisTemplate;
    public RedisConnectionCheck(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @Override
    public void run(String... args) {
        logger.info("🔴 Making connection to Redis at {}:{}.", redisHost, redisPort);

        String key = "redis_connection_test";
        String value = "success";
        redisTemplate.opsForValue().set(key, value);

        logger.info("🟢 Connected to Redis at {}:{}.", redisHost, redisPort);
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.