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
通常守护进程或服务器进程不应该要求这个。