Я пытаюсь изящно закрыть службу, которую я запускаю в контейнере докера (на малине pi 3 b, работающей на raspbian lite), поскольку просто выдает «докер-стоп» 'прерывает службу (файл блокировки не очищается)bash script command «trap» не работает в контейнере докеров
В моих интернет-исследованиях люди, работающие с командой «trap» команды bash, выполняют команду, когда скрипт получает сигнал на завершение.
Я попытался это следующим:
docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' INT; echo waiting; read"
Когда я запускаю выше команды, «ожидание» печатается на экране и, когда я ударил CTRL + C, сообщение «выключая» появляется. - Именно так, как я хочу!
Единственная проблема заключается в том, что я не могу получить этот сигнал, отправленный в сценарий bash из-за контейнера докера. Я попытался (в параллельной сессии SSH):
docker kill --signal="INT" trap
docker kill --signal="SIGINT" trap
Кроме того, я попытался использовать сигнал по умолчанию, отправляемый на «Docker остановки», но это привело к консоли ожидания ~ 10s (по умолчанию докер stop timeout), а затем убивает контейнер докера.
docker stop trap
Ни один из методов не получил сообщение «shutting down» для печати на экране.
Я бы очень признателен за любую помощь.
Edit 1: Он не работает с SIGTERM либо (когда я либо из следующих команд, а затем выдать «Docker стоп» Я до сих пор не получаю сообщение «выключая»).
docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' TERM; echo waiting; read"
docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"
Обход: Изображение, кажется, проблема. Входная точка '/usr/bin/entry.sh' захватывает сигнал. Я попробовал его с другим изображением, и она работала:
$ docker run -it --name trap digitallyseamless/archlinux-armv6h /bin/bash -c " trap 'echo shutting down ; exit 0' SIGTERM; echo waiting; read"
Остановите контейнер с помощью (из другого терминала)
$ docker stop trap
Затем просмотрите выходным контейнером
$ docker logs trap
waiting
shutting down
Поскольку у меня есть нет особой необходимости использовать конкретное изображение (это действительно просто средство для достижения моей цели), я просто поменяю изображения.
PS: Огромное спасибо @tkausl
'docker stop' отправляет SIGTERM – tkausl
вы можете взглянуть на это - http://stackoverflow.com/questions/40298849/gracefully-stop-phusion-passenger-running-on-apache/40299520#40299520 – Rao
@tkausl, к сожалению, это не работает (см. Редактировать 1) – EvilDevil