2015-07-21 2 views
8

У меня есть cronjob, работающий внутри контейнера докера, который проверяет, работают ли все службы, как ожидалось. Если cronjob определяет, что есть проблема, которую я хотел бы, чтобы остановить контейнер Docker (внутри ...)Остановка контейнера докера изнутри

К сожалению exit просто останавливает мой cronjob скрипт

+1

'shutdown -h now'? – zero323

+0

Какое изображение является вашим контейнером на основе? – Thomasleveil

+0

это от ubuntu: 12.04 –

ответ

2

В принципе, вам нужно PID 1, чтобы выйти, чтобы остановить контейнер.

Первоначально я думал, что kill -s SIGKILL 1 будет работать, но PID 1 защищен, поэтому нет.

Как было предложено @Thomasleveil, вы можете добавить код, такой как trap "exit" SIGINT SIGTERM, в скрипт PID 1, что будет означать, что процесс будет отправлен при отправке kill -s SIGINT 1. Я немного предпочитаю этот метод тому, с которым вы столкнулись (убивая дочерний процесс напрямую), поскольку он дает родительскому процессу возможность очистить, а также родительский процесс должен иметь возможность найти PID дочернего процесса без awk.

Однако, если вы используете несколько процессов, вам следует использовать что-то вроде supervisord или runit.

+0

Я тоже думал об этом, но не смог заставить его работать. У вас есть файл Docker для витрины? – Thomasleveil

+0

Эрр, не так ли? Есть ли сообщение об ошибке? Какой пользователь выполняет задание cron? –

+0

Я попытался использовать сценарий оболочки, содержимое которого 'kill -s SIGKILL 1' + бесконечный цикл/спящий режим и заставить docker запускать этот сценарий оболочки при запуске (с правами root). Поэтому у меня нет cron, просто работает простой скрипт; может быть, процесс не может убить себя? Также «man 2 kill», похоже, указывает, что команда kill отказывается отправлять сигналы процессу, если этот процесс явно не определяет обработчик для этого конкретного сигнала. – Thomasleveil

1

Я попытался убить процесс 1 без успеха.

Попробуйте запросить @ zero323 с помощью shutdown -h now. Он отлично работает (извините, я не могу голосовать за него напрямую, так как его нет в списке ответов).

+0

Это то, что происходит в последней Ubuntu изображения: > корень @ b968bf313300:/# выключение -h Теперь Не удалось подключиться к шине: Нет такого файла или каталога Не удалось поговорите с демоном init. И ничего не делает. –

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