pls_help
pls_help

Reputation: 1

Redis refuses connection to Spring Boot via Docker Compose

I developed a spring boot application to store login information via redis. I have following docker-compose.yml:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8082:8082"
    links:
      - redis
  redis:
    image: redis
    container_name: redis
    hostname: redis-db
    ports:
      - "6379:6379"
    command: redis-server --port 6379 --bind 0.0.0.0 --protected-mode no

Dockerfile:

FROM openjdk:8-jre-alpine
VOLUME /tmp
COPY app.jar app.jar
EXPOSE 8082

ENTRYPOINT ["java", "-jar",  "app.jar"]

In the Spring Boot Application, I just use following application.properties to setup the Redis Connection:

server.port = 8082

spring.redis.host=redis-db
spring.redis.port=6379

I access the repository via CrudRepository and QueryByExampleExecutor. Every time I try to access the data, I get the following error:

sgartner-web-1  | 2021-11-25 01:22:53.600 ERROR 1 --- [nio-8082-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379] with root cause
sgartner-web-1  | 
sgartner-web-1  | java.net.ConnectException: Connection refused
sgartner-web-1  |       at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_212]
sgartner-web-1  |       at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_212]
sgartner-web-1  |       at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:707) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.69.Final.jar!/:4.1.69.Final]
sgartner-web-1  |       at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]

I already have tested the application "normal" instances of redis and the application. What seems odd to me is the "Unable to connect to localhost:6379]", even though I'm not trying to connect to localhost.

Testing this behavior while running the application outside of a container shows, that it recognises the changed hostname and doesn't try to connect to localhost...

The specified redis command also doesn't seem to be the problem: tested this with running redis outside of a container with the same command and trying to connect to it via a VM.

I would really appreciate a solution or another possible cause to look into. Thanks to whoever replies to this!

Upvotes: 0

Views: 2287

Answers (1)

Uday
Uday

Reputation: 199

as per logs it clearly says that web application is not able to connect to redis port 6379. Can you try expose 6379 in Dockerfile? , please check first are you able to pint 6379 from your local machine. Seems network issue.

See is this helps.

Docker can't connect to redis from another service

Upvotes: 1

Related Questions