【问题标题】:Not able to connect to redis which is in diffrent system with in docker and spring boot server running on different system in docker container无法连接到在不同系统中的redis,在docker和spring boot服务器中运行在docker容器中的不同系统上
【发布时间】:2020-03-08 01:23:08
【问题描述】:

获取异常 java.net.ConnectException:当我尝试连接到 redis 服务器时连接被拒绝。

这是我提到要连接的 redis 属性

spring.redis.database=2 spring.redis.host=172.15.5.100

//这是我运行redis容器的系统ip地址

spring.redis.port=6380 `spring.redis.sentinel.master= redis

这是我的 docker-compose-yml 文件

services:
    server:
      container_name: server
      build: .
      ports: 
          - "8080:8080"
          - "3000:3000"
      depends_on:
          - redis_presence_system

    redis_presence_system:
      container_name: redis
      image: "redis:4.0.9" 
      hostname: redis
      ports:
        - "6380:6380"
      expose:
        - "6380"
      volumes:
         - ./redis-data:/data    
      restart: always``


Error message which i'm getting
java.net.ConnectException: Connection refused at redis.clients.jedis.Connection.connect(Connection.java:207) [jedis-2.9.0.jar:] at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) [jedis-2.9.0.jar:] at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767) [jedis-2.9.0.jar:] at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106) [jedis-2.9.0.jar:] at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:888) [commons-pool2-2.4.3.jar:2.4.3] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:432) [commons-pool2-2.4.3.jar:2.4.3] at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361) [commons-pool2-2.4.3.jar:2.4.3] at redis.clients.util.Pool.getResource(Pool.java:49) [jedis-2.9.0.jar:] ... 27 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) [rt.jar:1.7.0_80] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) [rt.jar:1.7.0_80] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) [rt.jar:1.7.0_80] at java.net.Socket.connect(Socket.java:579) [rt.jar:1.7.0_80] at redis.clients.jedis.Connection.connect(Connection.java:184)

【问题讨论】:

    标签: spring-boot docker redis


    【解决方案1】:

    ports: 中的第二个数字需要与容器内的进程正在侦听的端口匹配。这通常是您正在运行的服务的“正常”端口;在 Redis 的情况下,端口 6379。所以改变

    ports:
      - "6380:6379"
    

    (您不需要设置container_name:hostname:expose:;这些实际上并不设置与大多数应用程序相关的任何属性,并且所有这些属性都有合理的默认值。)

    当您在两个容器之间进行连接时,您需要使用内部主机名(services: 块的名称)和进程本身正在侦听的端口号对其进行配置。 ports: 没有任何作用,实际上并不需要在容器之间进行连接。在您的应用程序中,您还需要设置

    spring.redis.port=6379
    spring.redis.sentinel.master=redis_presence_system
    

    匹配标准 Redis 端口号,以及 Compose YAML 文件中 Redis 服务块的名称。

    【讨论】:

    • @DaviMaze,我试过你的方法,它显示同样的错误。
    • 抱歉,我解决了错误的问题。我已经编辑了这个问题来讨论容器间的通信。
    • spring.redis.port=6379 spring.redis.sentinel.master=redis_presence_system这个属性我应该提到另一个我需要连接到redis的系统。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2021-06-03
    • 2023-02-23
    • 2019-02-08
    • 1970-01-01
    • 2019-10-25
    • 2020-02-18
    • 2019-04-28
    相关资源
    最近更新 更多