쉘 스크립트로 실행 시킨 컨테이너 내에 서비스는 도커가 종료시 종료 시그널을 받지 못함.
Entrypoint 가 shell script 일 경우.
해결방법
- 쉘 스크립트에서 SIGTERM 이벤트를 받아 해당 서비스를 KILL 하면서 SIGTERM을 보내기
#!/bin/sh
set -x
pid=0
# SIGTERM-handler
term_handler() {
if [ $pid -ne 0 ]; then
kill -SIGTERM "$pid"
wait "$pid"
fi
exit 143;
}
trap 'kill ${!}; term_handler' SIGTERM
java -jar server.jar &
pid="$!"
# wait forever
while true
do
tail -f /dev/null & wait ${!}
done