Подключитесь к Redis с помощью кода java, если есть докер, состоящий из Redis и Redis Commander

#java #docker-compose #redis #jedis #redis-server

Вопрос:

Я пытаюсь подключиться к Redis, используя приведенный ниже Java-код с библиотекой Jedis, но соединение не удается, может кто-нибудь, пожалуйста, помогите в этом ?.

 Jedis jedis = new Jedis("localhost"); String pingResponse = jedis.ping(); System.out.println("ping should return pong"   pingResponse);  

а это мой файл docker-compose

 version: '3' services:  redis:  container_name: redis  hostname: redis  image: redis   redis-commander:  container_name: redis-commander  hostname: redis-commander  image: rediscommander/redis-commander:latest  restart: always  environment:  - REDIS_HOSTS=local:redis:6379  ports:  - "8082:8081"  

ниже приведено исключение, которое я получаю :

 Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host redis:6379  at redis.clients.jedis.Connection.connect(Connection.java:204)  at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:100)  at redis.clients.jedis.Connection.sendCommand(Connection.java:125)  at redis.clients.jedis.Connection.sendCommand(Connection.java:120)  at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:113)  at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:188)  at com.altimetrik.demo.bean.Sample.main(Sample.java:23)  

Комментарии:

1. почему он терпит неудачу? пожалуйста, опубликуйте исключение и соответствующие журналы.

2. @TomElias добавил журналы ошибок

Ответ №1:

я думаю, что ваш контейнер Redis не предоставляет внешние порты для подключения, только командир предоставляет 8002. (попробуйте подключиться к локальному хосту:8002). docker compose создает «мостовую» сеть по умолчанию, чтобы контейнеры могли общаться между собой, но не снаружи, если вы не предоставляете порты. командир может подключиться к REDIS, так как они находятся в одной сети.