Akka node in docker is explicitly disabled

I am using akka 2.4-M2 in my project. And I want to deploy my projects with docker. However, when I use boot2docker to test two nodes, a problem occurs. My node cannot connect to seed-node.

The configuration in the build.sbt file looks like this:

lazy val `topGatewayFrontend` = (project in file("topGatewayFrontend"))
  .enablePlugins(PlayScala)
  .enablePlugins(DockerPlugin)
  .settings(
    name := "topGatewayFrontend",
    libraryDependencies ++= (Dependencies.topGatewayFrontend ++ Seq(cache,     ws)),
    dockerExposedPorts := Seq(9000)
  )

lazy val `topGatewayBackend` = (project in file("topGatewayBackend"))
  .enablePlugins(JavaAppPackaging)
  .enablePlugins(DockerPlugin)
  .enablePlugins(UniversalPlugin)
  .settings(
    name := "topGatewayBackend",
    javaOptions in run ++= Seq(
      "-Djava.library.path=./sigar",
      "-Xms128m", "-Xmx512m"),
    // this enables custom javaOptions
    fork in run := true,
    libraryDependencies ++= Dependencies.topGatewayBackend ++ Seq(ws),
    dockerExposedPorts := Seq(9527)
  ).dependsOn(auditApi).aggregate(auditApi)

      

Remote configuration in topGatewayFrontend:

akka{
  remote {
    log-sent-messages = on
    log-received-messages = on
    netty.tcp {
      hostname = ${?HOSTNAME}
      port = 9527                   # external (logical) port
      bind-hostname = 0.0.0.0
      bind-port = 0
    }
  }
  cluster {
    seed-nodes = ["akka.tcp://application@"${?HOSTNAME}":9527"]
    roles = [topGatewayBackend]
  }
}

      

TopGatewayBackend has:

akka{
  remote {
    log-sent-messages = on
    log-received-messages = on
    netty.tcp {
      hostname = ${?HOSTNAME}
      port = 0              # external (logical) port
      bind-hostname = 0.0.0.0
      bind-port = 0
    }
  }
  cluster {
    seed-nodes = ["akka.tcp://application@"${?HOSTNAME}":9527"]
    roles = [topGatewayFrontend]
  }
}

      

And I got the log as below:

To the backend:

[INFO] [07/12/2015 03:13:37.568] [application-akka.actor.default-dispatcher-16] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:9527] - Metrics collection has started successfully
[INFO] [07/12/2015 03:13:38.107] [application-akka.actor.default-dispatcher-16] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:9527] - Leader is moving node [akka.tcp://application@192.168.59.103:9527] to [Up]
[INFO] [07/12/2015 03:13:38.112] [application-akka.actor.default-dispatcher-4] [akka.tcp://application@192.168.59.103:9527/user/cluster-monitor] Member up akka.tcp://application@192.168.59.103:9527 with roles Set(topGatewayBackend)

      

In the interface:

[INFO] [07/12/2015 03:13:47.558] [main] [akka.remote.Remoting] Starting remoting
[INFO] [07/12/2015 03:13:47.842] [main] [akka.remote.Remoting] Remoting started; listening on addresses :[akka.tcp://application@192.168.59.103:34354]
[INFO] [07/12/2015 03:13:47.883] [main] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:34354] - Starting up...
[INFO] [07/12/2015 03:13:48.057] [main] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:34354] - Registered cluster JMX MBean [akka:type=Cluster]
[INFO] [07/12/2015 03:13:48.058] [main] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:34354] - Started up successfully
[INFO] [07/12/2015 03:13:48.251] [application-akka.actor.default-dispatcher-17] [akka.cluster.Cluster(akka://application)] Cluster Node [akka.tcp://application@192.168.59.103:34354] - Metrics collection has started successfully
[WARN] [07/12/2015 03:13:48.509] [application-akka.remote.default-remote-dispatcher-5] [akka.tcp://application@192.168.59.103:34354/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fapplication%40192.168.59.103%3A9527-0] Association with remote system [akka.tcp://application@192.168.59.103:9527] has failed, address is now gated for [5000] ms. Reason: [Association failed with [akka.tcp://application@192.168.59.103:9527]] Caused by: [The remote system explicitly disassociated (reason unknown).]

      

The problem is that [The association did not work with [akka.tcp: // application@192.168.59.103 : 9527]] Reason: [The remote system is clearly disabled (reason unknown).]

Docker run command: docker run -e HOSTNAME=192.168.59.103 -p 9527:9527 docker.fenxibao.com/topgatewaybackend:1.0-SNAPSHOT

anddocker run -p 9000:9000 -e HOSTNAME=192.168.59.103 docker.fenxibao.com/topgatewayfrontend:1.0-SNAPSHOT

I am wondering what I can do to link the interface to the backend.

Thanks in advance for your patients' responses.

+3


source to share


1 answer


Check out this how to start akka cluster in docker: http://blog.michaelhamrah.com/2014/06/akka-clustering-with-sbt-docker-and-sbt-native-packager/

The short answer is that the akka cluster requires the address to be consistent with both internal and external. So when you run akka app in docker you need to work with the internal IP that is dynamically generated for your container.

You should have your script run like this:



#!/bin/bash

CLUSTER_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'` $@     

      

Put it in a docker container and use the CLUSTER_IP environment variable in your akka config for your cluster host address.

UPDATE: In docker version 1.10+, due to the addition of a new network function, there is no need to run the script. You can just use the container name as the link and docker fixes the address for you.

+3


source







All Articles