使用Redis时,Spring Boot Redis获取连接被拒绝异常

时间:2018-08-13 17:35:50

标签: docker spring-boot redis docker-compose

我有一个小型应用程序,在其中我将Redis用于缓存和Spring Boot。应用程序在本地成功运行,但是当我尝试对其进行docker化时,出现连接拒绝异常。

这是我的docker-compose.yml文件:

version: '3.5'

services:
  my-application:
    image: my-application:latest
    container_name: my-application
    ports:
      - 8080:8080
    hostname: my-application

  redis:
    image: redis
    command: [ "redis-server", "--protected-mode", "no" ]
    volumes:
      - ./data:/data
    ports:
      - 6379:6379   

Dockerfile:

FROM openjdk:7

VOLUME /tmp

ADD my-application-0.0.1.jar my-application-0.0.1.jar

EXPOSE 8080

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "my-application-0.0.1.jar"]

当我检查docker控制台时,我看到redis以独立模式启动

我想念什么?

谢谢

3 个答案:

答案 0 :(得分:0)

您必须设置:

server.address=0.0.0.0
在您的application.properties

。如果您的应用程序正在容器中的127.0.0.1上侦听,则您将无法从主机访问它。

答案 1 :(得分:0)

您需要在docker compose文件中将redis主机更改为redis配置的名称,在这种情况下- redis

可以通过两种方式进行配置:

  • 更改属性文件 spring.redis.host = redis
  • 在手动配置(redis或jedis)中设置主机redisStandaloneConfiguration.setHostName("redis");

此外,就我而言,我没有在docker文件中使用卷,因此要使用新的jar文件,您需要执行启动docker compose的所有3个步骤(除了gradle或clean install中的clean build以外)在Maven中):

  • docker-compose down
  • docker-compose build
  • docker-compose up

我希望这对某人有用! :)

答案 2 :(得分:0)

我遇到了同样的问题,并用(docker-compose.yml)修复了

 cache:
    image: redis
    ...
    ports:
      - 6379:6379  

然后在application.properties spring.redis.host=cache

最终

@Value("${spring.redis.host}")
String redisHost
...
redisStandaloneConfiguration.setHostName(redisHost);

我认为,在docker网络中,与图像名称相同的服务名称引起了问题,并以docker无法创建与Redis主机的连接而告终。