nodo akka en acoplador explícitamente desasociado

Estoy usando akka 2.4-M2 en mi proyecto. Y quiero implementar mis proyectos con Docker. Sin embargo, cuando estoy usando boot2docker para probar los dos nodos, aparece un problema. Mi nodo no se puede conectar a seed-node.

La configuration en build.sbt es la siguiente:

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) 

La configeración remota en topGatewayFrontend es:

 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] } } 

En topGatewayBackend es:

 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] } } 

Y obtuve el logging de la siguiente manera:

En back-end:

 [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) 

En frontend:

 [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] - Registenetworking 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).] 

El problema es que [Asociación falló con [akka.tcp: //application@192.168.59.103: 9527]] Causado por: [El sistema remoto explícitamente desasociado (razón desconocida).]

el command docker run es: docker run -e HOSTNAME=192.168.59.103 -p 9527:9527 docker.fenxibao.com/topgatewaybackend:1.0-SNAPSHOT y docker run -p 9000:9000 -e HOSTNAME=192.168.59.103 docker.fenxibao.com/topgatewayfrontend:1.0-SNAPSHOT

Me pregunto qué puedo hacer para que el frontend se asocie exitosamente con el back-end.

Gracias de antemano por las respuestas de sus pacientes.

Compruebe esto para saber cómo ejecutar un clúster de Akka dentro de la window acoplable: http://blog.michaelhamrah.com/2014/06/akka-clustering-with-sbt-docker-and-sbt-native-packager/

Una respuesta corta es que el clúster de akka requiere que la dirección sea coherente tanto interna como externa. Por lo tanto, cuando inicie su aplicación Akka dentro de la window acoplable, debe trabajar con la dirección IP interna que se creó dinámicamente para su contenedor.

Necesitas tener un script de inicio como este:

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

Póngalo en su contenedor de docker y use la variable de entorno CLUSTER_IP en su configuration de akka para su dirección de host del clúster.

ACTUALIZACIÓN: en la versión 1.10+ de Docker, debido a la nueva function de networking agregada, no es necesario tener un script de inicio. Puede usar el nombre del contenedor como reference y Docker arreglar la dirección por usted.