#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, так как они находятся в одной сети.