Akka HTTP在Docker容器中过早closures

我有一个简单的Akka HTTP服务器端口8080本地运行。它完美的工作,并显示以下消息:

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

我正在使用sbt-assembly来创build.jar文件。 它生活在target/scala-2.12/my-app-assembly-0.1.jar

然后,我创build一个简单的Dockerfile如下所示:

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

build立docker形象:

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

并运行它:

 docker run {my namespace}/my-app 

现在,它还显示:

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

但之后立即抛出这些错误并closures:

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

任何想法为什么会发生?

默认情况下,Docker会closures可能会影响您的应用程序的标准input,因为它提示用户input: press enter to kill server

使用-i选项运行容器以保持stdin打开 。

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

通常守护进程或服务器进程不应该要求这个。