Akka HTTP 在 docker 容器中过早关闭
Akka HTTP shuts down prematurely in a docker container
我有一个简单的 Akka HTTP 服务器 运行 在本地端口 8080 上运行。它运行良好并显示以下消息:
Started server at 127.0.0.1:8080, press enter to kill server
我正在使用 sbt-assembly
创建 .jar 文件。它住在 target/scala-2.12/my-app-assembly-0.1.jar
然后,我创建了一个简单的 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"]
构建 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
但紧接着,它抛出这些错误并关闭:
...
[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 关闭标准输入,这可能会影响您的应用,因为它会提示用户输入:press enter to kill server
。
Run the container with the -i
option to keep stdin open.
docker run -i {my namespace}/my-app
通常守护进程或服务器进程不需要这个。
我有一个简单的 Akka HTTP 服务器 运行 在本地端口 8080 上运行。它运行良好并显示以下消息:
Started server at 127.0.0.1:8080, press enter to kill server
我正在使用 sbt-assembly
创建 .jar 文件。它住在 target/scala-2.12/my-app-assembly-0.1.jar
然后,我创建了一个简单的 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"]
构建 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
但紧接着,它抛出这些错误并关闭:
...
[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 关闭标准输入,这可能会影响您的应用,因为它会提示用户输入:press enter to kill server
。
Run the container with the -i
option to keep stdin open.
docker run -i {my namespace}/my-app
通常守护进程或服务器进程不需要这个。