2017-10-08 9 views
0

J'ai un simple serveur HTTP Akka fonctionnant localement sur le port 8080. Il fonctionne parfaitement et affiche le message suivant:Akka HTTP arrête prématurément dans un récipient docker

Started server at 127.0.0.1:8080, press enter to kill server 

J'utilise sbt-assembly pour créer le .jar fichier. Il vit sous target/scala-2.12/my-app-assembly-0.1.jar

Ensuite, je crée simple Dockerfile comme:

FROM openjdk:8u131 
ADD target/scala-2.12/my-app-assembly-0.1.jar app.jar 
ENTRYPOINT ["java", "-jar", "app.jar"] 
CMD ["-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:MaxRAMFraction=1", "-XshowSettings:vm"] 

construire l'image docker:

docker build -t {my namespace}/my-app . 

et l'exécuter:

docker run {my namespace}/my-app 

Maintenant, il affiche également:

Started server at 127.0.0.1:8080, press enter to kill server 

Mais immédiatement après, il jette ces erreurs et les arrêts:

... 
[DEBUG] [10/08/2017 23:18:15.056] [default-akka.actor.default-dispatcher-7] [akka://default/system/IO-TCP/selectors/$a/0] Monitored actor [Actor[akka://default/user/StreamSupervisor-0/$$a#1560882800]] terminated 
[DEBUG] [10/08/2017 23:18:15.060] [default-akka.actor.default-dispatcher-6] [akka://default/system/IO-TCP/selectors/$a/0] Closing serverSocketChannel after being stopped 
[DEBUG] [10/08/2017 23:18:15.067] [default-akka.actor.default-dispatcher-4] [EventStream] shutting down: StandardOutLogger started 

Toute idée pourquoi est-ce qui se passe?

Répondre

3

Par défaut, Docker ferme l'entrée standard, ce qui peut avoir un impact sur votre application en raison de l'invite de saisie de l'utilisateur: press enter to kill server.

Run the container with the -i option to keep stdin open. Normalement, les processus de démon ou de serveur ne devraient pas l'exiger.

docker run -i {my namespace}/my-app 

+0

Merci beaucoup! C'était ça :) –