TL;DR: как мне написать Dockerfile
или команды Docker для запуска Docker-контейнеров, чтобы я мог остановить и выйти из работающего Docker-контейнера, когда я нажму ctrl+c
?
Background
Мне нужно запустить бесконечный цикл while в сценарии оболочки.Когда я запускал этот скрипт локально, команда ctrl+c
выйдет из бесконечного цикла.
# content of sync.sh
while true; do
echo "Do something!"
some_syncing_command || {
rm -rf /tmp/healthy && break
}
echo "Finish doing something!"
touch /tmp/healthy
sleep ${waitingSeconds}
done
Поэтому на основе сценария оболочки я создал образ Docker со следующим содержанием Dockerfile
:
FROM debian:stretch
COPY sync.sh .
ENTRYPOINT ["/sync.sh"]
и создайте образ, запустив docker build -t infinite-loop .
Проблема
Однако после попытки разных попыток запустить образ infinite-loop
я не могу остановиться и выйти из режима работыДокер контейнер после удара ctrl + c
.Вот команды Docker, которые я использовал для запуска образа Docker:
docker run --rm to-infinity-1 infinite-loop
docker run --rm -it to-infinity-2 infinite-loop
docker run --rm -d to-infinity-3 infinite-loop
, затем запустите docker attach
наto-infinity-3
Всем вышеперечисленным командам не удается остановить и выйти из бесконечного цикла после непосредственного выполнения ctrl+c
.Следовательно, мне нужно запустить docker stop [container-name]
, чтобы остановить работу контейнеров с бесконечными циклами.Что я должен изменить в своей реализации, чтобы решить эту проблему?
Спасибо.
Редактировать: дополнительный контекст, я использую kubernetes с контейнером бесконечного цикла.Интересно, будет ли эта проблема ctrl+c
(связанная с SIGINT) мешать kubernetes, если я захочу изящно остановиться и выйти из работающей капсулы.Обратите внимание, что хотя ctrl+c
проблематично, я все же смог использовать docker stop
, чтобы остановить работающие контейнеры.