无法从应用程序连接到正确的 Redis 主机

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

我正在开发一个使用 Redis 的 Spring Boot 项目。我能够在单独的 Docker 容器中运行它,并且运行良好。但是,将 Spring Boot 应用程序、Redis 和 MariaDB 添加到

docker-compose.yml
文件并运行后,所有容器都成功启动。问题是,当我进行基于 Redis 的 API 调用时,我收到以下错误:

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis

查看日志后,发现以下记录:

io.lettuce.core.RedisClient : Resolved SocketAddress localhost/<unresolved>:6379 using redis://localhost

io.lettuce.core.AbstractRedisClient : Connecting to Redis at localhost/<unresolved>:6379

这表明即使我在

docker-compose.yml
application.properties
中将主机名指定为“redis”并指定相关端口,应用程序仍在尝试连接到本地主机 API。

你能帮忙吗?

docker-compose.yml

 version: "3.8"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - .:/app
      - ~/.m2:/root/.m2 
    environment:
      - MAVEN_OPTS=-Xmx512m
      - SPRING_DATASOURCE_URL=my_db_url?useSSL=false  
      - SPRING_DATASOURCE_USERNAME=my_user
      - SPRING_DATASOURCE_PASSWORD=my_pass
      - SPRING_REDIS_HOST=redis
      - SPRING_REDIS_PORT=6379
    depends_on:
      - redis
      - mariadb
    networks:
      - app-network

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf 
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    networks:
      - app-network

  mariadb:
    image: mariadb:latest
    environment:
      - MYSQL_ROOT_PASSWORD=my_pass
      - MYSQL_DATABASE=my_db
    ports:
      - "3306:3306" 
    volumes:
      - mariadb_data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mariadb_data:

application.properties

spring.redis.host=redis
spring.redis.port=6379

我还创建了一个

redis.conf
文件。

bind 0.0.0.0
protected-mode no
spring-boot docker docker-compose redis
1个回答
0
投票

日志表明您的应用程序正在连接到

localhost
而不是 Redis 主机。请检查您的 Java 代码,确保它从配置属性中正确读取 Redis 主机。要验证这一点,您可以通过 Docker 中的环境变量传递 Redis 主机。此外,请确保在运行应用程序时使用正确的应用程序属性配置文件。

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