Как я могу заставить контейнер docker запускать скрипт каждый раз, когда контейнер перезапускается? - PullRequest
1 голос
/ 23 января 2020

Я знаю, что могу использовать команды dockerfile CMD RUN и ENTRYPOINT для запуска скрипта при запуске контейнера, но как я могу заставить контейнер запускать скрипт каждый раз, когда контейнер перезапускается при сбое?

1 Ответ

4 голосов
/ 23 января 2020

точка входа запускается каждый раз, когда контейнер запускается или перезапускается. Обычная практика - помещать загрузочную конфигурацию в сценарий оболочки, который в конце exec устанавливает «истинную» точку входа приложения. (См. Какую цель использует exe c в docker сценариях точки входа? , почему exec важен).

Помните, docker на самом деле просто оболочка вокруг файловая система, процесс и сетевое пространство имен. Он не может перезапустить ваш контейнер никоим образом, кроме перезапуска того же самого процесса, который был запущен изначально.

Вы можете попробовать это сами, вызвав что-то вроде этого:

docker run  -d --restart=always --entrypoint=sh alpine -c "sleep 5; echo Exiting; exit"

если вы docker logs -f этот контейнер, вы увидите, что Exiting выходит через каждые 5 секунд. Обратите внимание, что остановка контейнера также остановит последующий журнал, поэтому вам придется запустить его снова, чтобы увидеть следующий перезапуск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...