Приложение Spring Boot в Docker не может подключиться к контейнеру Redis (соединение отклонено)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Spring Boot в Docker не может подключиться к контейнеру Redis (соединение отклонено)

Сообщение Anonymous »

Я сталкиваюсь с ошибкой RedisConnectionFailureException при попытке подключиться к Redis из приложения Spring Boot, работающего в Docker. Вот сообщение об ошибке:

Код: Выделить всё

ERROR 1 --- [ElasticSearch_books] [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis] with root cause
java.net.ConnectException: Connection refused
Настройка и наблюдения
Среда:
  • Версия Spring Boot: 3.3 .5
  • Redis: работает как контейнер Docker
    Приложение: также помещено в контейнер Docker
< em>Что работает:
При запуске приложение Spring Boot локально (вне Docker) и Redis в Docker, приложение без проблем подключается к Redis.
Что не работает:
Когда приложение Spring Boot и Redis работают в контейнерах Docker, я получаю сообщение об ошибке «Отказано в соединении».
Конфигурации Docker и приложения
приложение -docker.properties:

Код: Выделить всё

spring.cache.type=redis
spring.redis.host=redis
spring.redis.port=6379
Конфигурация Docker Compose:
Оба приложения и службы Redis находятся в одной сети Docker (книжной сети).
Проверки работоспособности Redis и условие depend_on добавлены, чтобы гарантировать полную готовность Redis перед запуском приложения.
Дополнительные сведения
Я проверил следующее:
Сеть: приложение и Redis находятся в одной сети в Docker Compose (книжная сеть) и могут пинговать друг друга.
Переменная среды: SPRING_PROFILES_ACTIVE=docker установлена ​​для контейнера приложения, чтобы гарантировать использование application-docker.properties.
docker-compose.yml

Код: Выделить всё

networks:
book-network:
driver: bridge

services:
app:
image: elasticsearchbook:latest  # Reference to your application image
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"  # Maps the app's port to the host
depends_on:
elasticsearch:
condition: service_healthy
redis:
condition: service_healthy
prometheus:
condition: service_healthy
environment:
- SPRING_PROFILES_ACTIVE=docker
- SPRING_DATA_ELASTICSEARCH_HOST=elasticsearch
- SPRING_DATA_ELASTICSEARCH_PORT=9200
- SPRING_REDIS_HOST=redis
- SPRING_REDIS_PORT=6379
networks:
- book-network
restart: always
redis:
image: redis:alpine
ports:
- "6379:6379"  # Redis default port
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 10
networks:
- book-network
restart: always
Тест подключения: я могу успешно выполнить пинг Redis из контейнера приложения и даже использовать redis-cli для подключения изнутри контейнера приложения.
Несмотря на эти проверки, приложение Spring Boot по-прежнему не удается подключиться к Redis, когда оба работают в Docker.
Вопрос
Что может быть причиной проблемы соединения между мое приложение Spring Boot и Redis, когда оба они помещены в контейнер? Есть ли что-то особенное в сети Spring Boot 3.3.5 или Docker, которое я, возможно, упустил из виду?

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-connecti
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»