重新启动 Play 应用程序 Docker 容器会导致“此应用程序已在运行” - RUNNING_PID不会被删除
编辑:Github上有一个相关的问题正在讨论,但在另一种部署模式下(Typesafe Activator UI而不是Docker)。
我试图模拟系统重启,以验证Docker重启策略,该策略声明能够以正确的顺序重新运行容器。
我有一个用Java编写的Play框架应用程序。
Dockerfile 看起来像这样:
FROM ubuntu:14.04
#
# [Java8, ...]
#
RUN chmod +x /opt/bin/playapp
CMD ["/bin/bash"]
我使用.$ docker run --restart=always -d --name playappcontainer "./opt/bin/playapp"
当我和控制台告诉我:$ service docker stop && service docker restart
$ docker attach playappcontainer
Play server process ID is 7
This application is already running (Or delete /opt/RUNNING_PID file)
编辑:当我按照 Play 文档的建议将文件的位置更改为 /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).
那么:为什么当 docker 守护程序停止、重新启动并重新启动以前运行的容器时,包含 RUNNING_PID 的文件没有被删除?
当我,它告诉我:$ docker inspect playappcontainer
"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"
},
虽然:
容器内的主要进程将收到 SIGTERM,并在宽限期后接收 SIGKILL。
要终止正在运行的 Play 服务器,只需向进程发送 SIGTERM 即可正确关闭应用程序。