I have a simple Akka HTTP server running locally on port 8080. It works perfectly and displays the following message:
Started server at 127.0.0.1:8080, press enter to kill server
I am using sbt-assembly
to create the .jar file. It lives under target/scala-2.12/my-app-assembly-0.1.jar
Then, I create a simple Dockerfile
like:
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 the docker image:
docker build -t {my namespace}/my-app .
And run it:
docker run {my namespace}/my-app
Now, it also displays:
Started server at 127.0.0.1:8080, press enter to kill server
But immediately after that, it throws these errors and shutdowns:
...
[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
Any ideas why is this happening?
By default Docker closes standard input which may impact your app due to it's prompt about user input: press enter to kill server
.
Run the container with the -i
option to keep stdin open.
docker run -i {my namespace}/my-app
Normally daemon or server processes shouldn't require this.