-1

i have an akka http application and one keycloak docker container i used sbt native docker plugin to create a an image of my app and then i wrote a docker compose file but my app container is not discovering keycloak container

here is my build.sbt file

enablePlugins(DockerPlugin)
enablePlugins(JavaAppPackaging)
dockerExposedPorts := Seq(8083)

then i created a docker image of my project

>docker:publishLocal

then i created a docker-compose file

version: '3.3'

services:
  keycloak:
   image: jboss/keycloak
   container_name: docker-keycloak-container
   ports:
     - "8080:8080"
   environment:
     - KEYCLOAK_USER=admin
     - KEYCLOAK_PASSWORD=admin  

  akkahttpservice:
   image: myproject-auth:0.0.1
   container_name: docker-myproject-auth-container
   ports:
     - "8083:8083"
   depends_on:
      - keycloak
   

docker ps shows

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                              NAMES
181522f78d22        myproject-auth:0.0.1   "/opt/docker/bin/int…"   45 seconds ago      Up 40 seconds       0.0.0.0:8083->8083/tcp             docker-myproject-auth-container
d92d9c4f0a19        jboss/keycloak         "/opt/jboss/tools/do…"   5 days ago          Up 46 seconds       0.0.0.0:8080->8080/tcp, 8443/tcp   docker-keycloak-container

but when i hit my applications route which talks to keycloak i got

14:13:32.020 [scala-execution-context-global-45] ERROR com.ifkaar.lufz.authentication.actors.worker.TokenManagerActor - Actor TokenManager: exception in fetching token
docker-myproject-auth-container | akka.stream.StreamTcpException: Tcp command [Connect(0.0.0.0:8080,None,List(),Some(10 seconds),true)] failed because of java.net.ConnectException: Connection refused
docker-myproject-auth-container | Caused by: java.net.ConnectException: Connection refused
docker-myproject-auth-container |   at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
docker-myproject-auth-container |   at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:714)
docker-myproject-auth-container |   at akka.io.TcpOutgoingConnection$$anonfun$connecting$1.$anonfun$applyOrElse$4(TcpOutgoingConnection.scala:111)
docker-myproject-auth-container |   at akka.io.TcpOutgoingConnection.akka$io$TcpOutgoingConnection$$reportConnectFailure(TcpOutgoingConnection.scala:53)
docker-myproject-auth-container |   at akka.io.TcpOutgoingConnection$$anonfun$connecting$1.applyOrElse(TcpOutgoingConnection.scala:111)
docker-myproject-auth-container |   at akka.actor.Actor.aroundReceive(Actor.scala:537)
docker-myproject-auth-container |   at akka.actor.Actor.aroundReceive$(Actor.scala:535)
docker-myproject-auth-container |   at akka.io.TcpConnection.aroundReceive(TcpConnection.scala:33)
docker-myproject-auth-container |   at akka.actor.ActorCell.receiveMessage(ActorCell.scala:577)
docker-myproject-auth-container |   at akka.actor.ActorCell.invoke(ActorCell.scala:547)
docker-myproject-auth-container |   at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
docker-myproject-auth-container |   at akka.dispatch.Mailbox.run(Mailbox.scala:231)
docker-myproject-auth-container |   at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
docker-myproject-auth-container |   at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
docker-myproject-auth-container |   at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
docker-myproject-auth-container |   at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
docker-myproject-auth-container |   at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

but everything works when i run my app from sbt and use docker keycloak container why is that so ?

also i am running my akka http project on http://0.0.0.0:8083

kindly guide me on this

swaheed
  • 3,671
  • 10
  • 42
  • 103
  • 3
    You need to use the name (or ip address) of the target container. I.e., your application should be connecting to `http://keycloak:8080`. – larsks Jan 20 '21 at 14:37

1 Answers1

0

You need to inject address of keycloak into your service via environment variable. For this you can use service name as keycloak address (Compose docs)

services:
  keycloak:
   image: jboss/keycloak
   container_name: docker-keycloak-container
   ports:
     - "8080:8080"
   environment:
     - KEYCLOAK_USER=admin
     - KEYCLOAK_PASSWORD=admin  

  akkahttpservice:
   image: myproject-auth:0.0.1
   container_name: docker-myproject-auth-container
   environment:
     - KEYCLOAK_URL: "http://keycloak:8080"
   ports:
     - "8083:8083"
   depends_on:
      - keycloak
Valerii Rusakov
  • 1,091
  • 2
  • 11
  • 22