Изменить: Существует связанная с этим проблема обсуждаемая в Github, но в другом режиме развертывания (интерфейс API-интерфейсов SafeApp, а не Docker).
Я пытался смоделировать перезагрузку системы, чтобы проверить политику перезагрузки Docker, которая заявляет, что сможет повторно запускать контейнеры в правильном порядке.
У меня есть приложение для платформы Play, написанное на Java.
Файл Docker выглядит следующим образом:
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 с -Dpidfile.path=/var/run/play.pid
.
Play server process ID is 7
This application is already running (Or delete /var/run/play.pid file).
Итак: Почему файл, содержащий RUNNING_PID, не удаляется, когда демон docker останавливается, перезагружается и перезапускает ранее запускаемые контейнеры?
Когда я $ 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.
из Ссылка Docker на остановку $docker
Чтобы убить запущенный сервер воспроизведения, достаточно отправить SIGTERM на для правильного завершения работы приложения.
из документации Play Framework по остановке приложения для воспроизведения