Запустить скрипт, когда докер остановлен

Я пытаюсь создать контейнер докеров, используя файл докеров, где script-entry.sh должен выполняться при запуске контейнеров, а script-exit.sh - при остановке контейнера.

ENTRYPOINT помог решить первую часть проблемы, когда script-entry.sh запускается при запуске.

Как я могу убедиться, что script-exit.sh выполняется при выходе/остановке докера?


person B_B    schedule 05.03.2016    source источник
comment
Демон Docker записывает все в журнал, почему бы не написать сценарий/программу, которая анализирует журналы и, когда даже останавливается контейнер ID, выполняет сценарий, который вы хотите.   -  person Auzias    schedule 05.03.2016
comment
@Auzias Существует api событий и events встроенная в докер команда, которая лучше подходит для таких задач   -  person Matt    schedule 06.03.2016
comment
@Auzias, который также запускает что-то после события остановки, скорее всего, не сможет запуститься или прерваться.   -  person Matt    schedule 06.03.2016


Ответы (2)


docker stop отправляет сигнал SIGTERM основному процессу, работающему внутри контейнера Docker (сценарий входа). Итак, вам нужен способ поймать сигнал, а затем запустить сценарий выхода.

Подробнее о перехвате сигналов и пример (ближе к концу страницы)

person Xiongbing Jin    schedule 05.03.2016

Создайте скрипт и сохраните его как файл bash, содержащий следующее:

$CONTAINER_NAME="someNameHere"
docker exec -it $CONTAINER_NAME bash -c "sh script-exit.sh"
docker stop $CONTAINER_NAME

Запустите этот файл вместо запуска docker stop, и это должно помочь. Вы также можете настроить псевдоним для этого.

Что касается автоматизации внутри самого Docker, я никогда раньше этого не видел. Удачи в выяснении этого, если это тот путь, по которому вы хотите пойти.

person CtheGood    schedule 05.03.2016
comment
Это не ответ на вопрос. Вопрос в том, как выполнить скрипт после остановки контейнера, что отличается от того, как выполнить скрипт, а затем остановить контейнер. - person Auzias; 05.03.2016