Когда я запускаю скрипт в контейнере Docker, и скрипт перехватывает EXIT, и я посылаю Ctrl + C , Docker не может остановить контейнер.
Dockerfile
FROM alpine
RUN apk add --no-cache bash
COPY script.sh /
CMD ./script.sh
script.sh
#!/bin/bash
func() {
echo "exit script"
}
trap func EXIT
echo "script"
sleep 30
Для запуска
$ docker build -t traps .
$ docker run -it traps
Увидев, что «скрипт» отражается, нажмите Ctrl + C .
Ожидается: «скрипт выхода» печатается, и контейнер выходит, возвращая управлениемой терминал, так же, как если бы не было ловушки EXIT.
Фактически: «скрипт выхода» напечатан, но контейнер все еще работает и удерживает мой терминал.
Чтобы усложнить ситуацию,если я добавлю ловушку SIGINT, все будет работать так, как я ожидал.При нажатии Ctrl + C сначала срабатывает ловушка SIGINT, затем ловушка EXIT, а затем контейнер.
Что происходит?И есть ли способ заставить вещи работать без добавления фиктивной ловушки SIGINT?
(Причина использования -t
в первую очередь заключается в том, чтобы включить Ctrl + C .)