2016-10-28 15 views
1

У меня есть докер-контейнер с apache, работающий в переднем плане. При остановке контейнера докера SIGTERM отправляется всем дочерним процессам, который является apache в нашем случае.Изящно останавливать Phusion Пассажир работает на apache

Теперь проблема, с которой я столкнулся, заключается в изящном отключении apache при получении сигнала SIGTERM. Apache обычно заканчивает текущие запросы немедленно, что является основной причиной проблемы. Так или иначе, мне нужно перевести сигнал SIGTERM на SIGWINCH, который в конечном итоге изящно завершит работу сервера.

Я подумывал написать какой-то сценарий оболочки, но не мог понять, как начать.

Любые предложения в этом отношении были бы высоко оценены!

Спасибо.

+0

Как вы начинаете контейнер докеров? почему вам нужно запустить его на переднем плане? – Rao

+0

@Rao мы запускаем контейнер, используя CMD ["script.sh"]. Скрипт содержит команду для запуска apache с использованием: - httpd -k start -DFOREGROUND. Нам нужно запустить его на переднем плане, чтобы получить его журналы с помощью команды DOCKER LOGS. любой другой способ сделать это? – Ritesh

ответ

0

кот внутри контейнера может быть остановлен корректно, выдавая следующую команду (изменить TOMCAT пути, если это необходимо):

docker exec -it <container id/name> /usr/local/apache2/bin/apachectl -k graceful 

И на Ваш комментарий, если вы хотите, чтобы увидеть кот войти случае, если он не работает на переднем плане

docker exec -it <container id/name> tail -f tail -f /usr/local/apache2/logs/error_log 

UPDATE: на основе комментариев.

С docker documentation вы можете указать время при остановке контейнера докера. По умолчанию он будет ждать только 10 секунд.

Для остановки контейнера с различными тайм-аут:

docker stop -t <time in seconds> <container id/ name>

Я считаю, что, увеличивая время ожидания при остановке может помочь в вашем случае.

UPDATE2 передача пользовательский сигнал, SIGWINCH в вашем случае. Пожалуйста, обратитесь к here за более подробной информацией.

docker kill -s SIGWINCH <apache container id/name> 

Update3 Есть полезные ресурсы на сигнал захвата:

https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86#.qp68kskwd

http://www.techbar.me/stopping-docker-containers-gracefully/

Надежда это полезно.

+0

у нас нет сервера приложений tomcat. У нас работает apache в приложении «Пассажир для Ruby»! – Ritesh

+0

Извините, предположил apache-tomcat, но неважно. Все, что вам нужно, чтобы использовать правый правый путь к apache. обновленный ответ для использования apache2. – Rao

+0

Спасибо ..но у нас обычно есть 2 вещи: 1) Мы используем остановку докера, чтобы остановить контейнер. так что не может конкретно просто sto apache !! .. Нам нужно как-то intercet SIGTERM (отправляется докерной остановкой) и стрелять apachectl -k изящным !! 2) Мы перенаправляем журналы на stdout, а не на любой файл! Любое предложение? – Ritesh

 Смежные вопросы

  • Нет связанных вопросов^_^