2015-10-05 3 views
2

Есть ли способ, чтобы скрипт bash выполнялся при закрытии контейнера?Сценарий завершения загрузки контейнера Docker

использование:

  • есть мастера контейнер работает Nginx + PHP-FPM
  • есть Foo (проект) контейнер, который использует объемы и ссылки на мастеров
  • ubuntu 14.04 используется как основание для всех изображений

Когда Foo запускается он шлепает в ВХост конфигурационный файл для Nginx, чтобы использовать (а также добавляет проект в корневой директории и т.д., и т.д.)

Чего мы хотим добиться того, что когда Foo остановлен он будет делать очистку (удалить файл ВХостов, удалить проект из корневой директории и т.д.)

настройки /и т.д./RCX/KX-очистка не работает.

Единственный вариант, чтобы исследовать это, кажется, - это есть Баш-SIGTERM-слушателя в entryscript в бесконечном цикле (будет это отходы драгоценных циклов процессора?)

ответ

3

Как уже упоминалось в «Docker and the PID 1 zombie reaping problem» и " Trapping signals in Docker containers ", докер отправляет SIGCHLD или SIGTERM по телефону docker stop/docker kill.

Если ваше приложение foo может контролировать эти сигналы, или если процесс foo может обеспечивать обратные вызовы, он может запускать любой скрипт, который вы хотите.

process.on('SIGTERM', function() { 
    console.log('shutting down...'); 
}); 

Примечание:

При создании Dockerfile, убедитесь, что вы используете EXEC форму ENTRYPOINT или RUN команд.
В противном случае приложение будет запущено как подкоманда /bin/sh -c, которая не передает сигналы.
PID1 контейнера будет оболочкой, ваше приложение не получит никаких сигналов от команды docker kill.

Примечания: в ближайшее время (Q4 2015), докер 1,9 позволит вашему контейнеру, чтобы определить сигнал остановки он хочет реагировать с новой директивой STOPSIGNAL dockerfile. См. PR 15307.

+0

спасибо за указание статей –

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