Код: Выделить всё
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
При запуске приложение 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
Оба приложения и службы 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
Несмотря на эти проверки, приложение Spring Boot по-прежнему не удается подключиться к Redis, когда оба работают в Docker.
Вопрос
Что может быть причиной проблемы соединения между мое приложение Spring Boot и Redis, когда оба они помещены в контейнер? Есть ли что-то особенное в сети Spring Boot 3.3.5 или Docker, которое я, возможно, упустил из виду?
Подробнее здесь: https://stackoverflow.com/questions/791 ... r-connecti