vsftpd container kill SIGTERM이 안 됨

오젼·2022년 10월 26일
0

문제

mariadb 컨테이너랑 똑같이 PID1로 실행중인데 SIGTERM을 보내도 종료가 안 된다.

UID 차이때문인가 했는데 redis-server는 또 UID가 똑같이 root다.

원인이 뭐지

과정

  1. 찾아보니 컨테이너 stop의 과정이 container의 PID1에 SIGTERM을 보내고, 10초 후에도 프로세스가 종료가 안 됐으면 SIGKILL을 보내 강제종료를 한다고 한다.
  1. 그래서 container PID1 SIGTERM not working, vsftpd signal not working 등으로 검색해 봤는데 딱히 해결법이 나오지 않았다.
  1. 여러 시도를 해보던 중 vsfptd 자체가 PID1일 때는 SIGTERM이 안 먹히지만, PID가 1이 아닐 때는 정상적으로 SIGTERM이 먹히는 것을 발견

  2. 더 찾아보니 dumb-init이 필요한 이유와 관련이 있었음
    도커는 container의 ENTRYPOINT 또는 CMD로 실행된 프로세스가 PID1이 된다.
    문제는 원래 init process로 설계된 것이 아닌 프로세스가 PID1이 되면서 TERM signal을 제대로 handle 하지 못 하는 경우가 발생할 수 있다고 한다.
    그래서 내가 설정한 entrypoint의 process가 PID1이 된 상태에서 SIGTERM을 제대로 처리하지 못한다면, dumb-init을 사용하면 되는 것

다시 문제

흠.. 근데 이렇게 해도 정상종료는 안 된다.

-> dumb-init을 사용했을 때 저런 에러가 나게 됨

-> 대신 dumb-init을 사용하지 않으면 10초 후에 SIGKILL로 강제종료 시켜줘서 137로 exit 하게 됨..

다시 과정

찾아보니 143이 보통 unhandled TERM 처리에 관한 exit code라고 한다. (128 + 15)
아니나 다를까.. 다시 vsftpd를 TERM으로 종료시켜 보니 143 code가 떴다.

-> mysqld는 TERM 에 대해 정상종료를 하는 모습을 볼 수 있음

그럼 dumb-init을 사용해야 하는 건 맞는데.. docker-compose down을 할 때 오류가 난다 그럼ㅠㅠ... 대체 어떻게 해결해야 하는 것인가...

dumb-init

0개의 댓글