Edit: There is a related issue being discussed on Github but in another mode of deployment (Typesafe Activator UI and not Docker).
I was trying to simulate a system reboot in order to verify the Docker restart policy which declares to be able to re-run containers in the correct order.
I have a Play framework application written in Java.
The Dockerfile looks like this:
FROM ubuntu:14.04
#
# [Java8, ...]
#
RUN chmod +x /opt/bin/playapp
CMD ["/bin/bash"]
I start it using $ docker run --restart=always -d --name playappcontainer "./opt/bin/playapp"
.
When I $ service docker stop && service docker restart
and then $ docker attach playappcontainer
the console tells me:
Play server process ID is 7
This application is already running (Or delete /opt/RUNNING_PID file)
Edit: Same result when I follow the recommendation of the Play documentation to change the location of the file to /var/run/play.pid with -Dpidfile.path=/var/run/play.pid
.
Play server process ID is 7
This application is already running (Or delete /var/run/play.pid file).
So: Why is the file containing the RUNNING_PID not deleted when the docker daemon stops, gets restartet and restarts previously run containers?
When I $ docker inspect playappcontainer
, it tells me:
"State": {
"ExitCode": 255,
"FinishedAt": "2015-02-05T17:52:39.150013995Z",
"Paused": false,
"Pid": 0,
"Restarting": true,
"Running": true,
"StartedAt": "2015-02-05T17:52:38.479446993Z"
},
Although:
The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL.
from the Docker reference on $ docker stop
To kill a running Play server, it is enough to send a SIGTERM to the process to properly shutdown the application.
from the Play Framework documentation on stopping a Play application