Docker는 시스템 종료를 어떻게 처리합니까?

Docker는 시스템 종료를 어떻게 처리합니까?

이 정확한 질문은 이전에 요청되었습니다.그게 여기야그리고레딧에서. 그러나 실제 질문에 대한 답변은 없습니다.

내 Atlassian 서비스는 Docker 컨테이너 내에서 실행됩니다. 그러나 shutdown명령을 실행하면 어떻게 되는지 알고 싶습니다.소유자. 컨테이너를 정상적으로 종료하려고 합니까, 아니면 즉시 종료하려고 합니까? 어쨌든 나는 이것에 대한 실제 리소스를 찾을 수 없는 것 같습니다. 아마도 내가 docker를 처음 접했기 때문일 것입니다.

다음 상황을 상상해 보세요.

  1. 컨테이너를 실행 중입니다.
  2. shutdown종료 명령을 내립니다.소유자 아니요명시적으로 출판됨docker stop

이 시나리오에서 Docker는 무엇을 합니까? 안전하게 shutdown명령을 실행하고 다른 작업을 수행하기 전에 컨테이너가 정상적으로 종료되기를 기대할 수 있습니까 ?

제 경우에는 Ubuntu Server 19.04 인스턴스를 사용하고 있지만 문제는 보다 일반적인 시나리오/주요 배포판에 대한 것입니다.

답변1

컨테이너는 시스템의 다른 모든 프로세스와 마찬가지로 SIGTERM을 수신해야 합니다.

문제는 SIGTERM을 얻는 것이 컨테이너의 기본 프로세스(ENTRYPOINT에 의해 시작된 프로세스)라는 것입니다. 컨테이너가 바이너리를 시작하기 위해 스크립트를 실행하는 경우 exec바이너리가 컨테이너 프로세스가 되는 것이 중요합니다. 그렇지 않으면 쉘 인터프리터가 SIGTERM을 수신하게 되는데, 이는 일반적으로 하위 프로세스에 전달되지 않습니다.

AFAIK는 docker stop먼저 컨테이너에서 SIGTERM을 시도하고 10초 안에 종료될 것으로 예상합니다. 그렇지 않으면 SIGKILL을 보냅니다. 따라서 컨테이너가 빠르게 중지되면 docker stop괜찮을 것입니다.

답변2

이론적 접근 방식(@xenoid 사용)과 실제 접근 방식이 있습니다.

서버 종료 명령을 실행하고 무슨 일이 일어나는지 지켜보세요.

  1. 콘솔.네트워크가 즉시 차단될 수 있지만 종료 프로세스에는 여전히 상당한 시간이 걸릴 수 있습니다. 콘솔(일부 호스팅 제공업체는 가상 콘솔을 제공함)에서 상황을 관찰하는 것은 어떻습니까? 종료 시퀀스에 실제로 시간이 얼마나 걸리고 그 동안 어떤 일이 발생합니까?

  2. 통나무.제가 들은 바에 따르면, 데이터베이스 컨테이너는 종종 우려의 대상이 됩니다. 종료되나요, 아니면 정상적으로 종료되나요? 진실은 로그에 있습니다. 주의 깊게 관찰하십시오. 시스템을 부팅하고 종료 타임스탬프가 포함된 다음 로그를 확인하면 제대로 작동하고 있는 것입니다.

.

2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
  1. 종료 타이밍 구성.재시작 타이밍 매개변수를 변경하는 방법을 추가로 조사할 수도 있습니다. man systemd-system.conf다음 단락을 참조 하고 확인하십시오 DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=. 기본값은 90초입니다.

관련 정보