
이 정확한 질문은 이전에 요청되었습니다.여기 그래서그리고여기 레딧에서. 그러나 실제 질문에는 답변이 없습니다.
Docker 컨테이너 내에서 Atlassian 서비스를 실행하고 있습니다. 그런데 shutdown
다음 명령을 내리면 어떻게 되는지 궁금합니다.주인. 컨테이너를 정상적으로 종료하려고 합니까, 아니면 즉시 종료하려고 합니까? 어떻게 든 나는 이것에 대한 실제 자원을 찾을 수 없는 것 같습니다. 아마도 나는 docker를 처음 접했기 때문일 것입니다.
다음을 상상해 보세요:
- 실행 중인 컨테이너가 있습니다.
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 사용)과 실제 접근 방식이 있습니다.
서버 종료를 실행하고 무슨 일이 일어나는지 관찰하십시오.
콘솔.네트워크가 즉시 차단될 수 있지만 종료 과정에는 여전히 상당한 시간이 걸릴 수 있습니다. 콘솔(일부 호스팅 제공업체는 가상 콘솔 제공)에서 어떻게 진행되는지 관찰하세요. 종료 시퀀스가 실제로 얼마나 걸리며 그 동안 어떤 일이 발생합니까?
로그.내가 본 바로는 데이터베이스 컨테이너가 종종 걱정거리입니다. 종료되나요, 아니면 정상적으로 종료되나요? 진실은 로그에 있습니다. 주의 깊게 관찰하십시오. 시스템을 부팅하고 종료 타임스탬프가 포함된 다음 로그를 보면 꽤 잘 진행되고 있는 것입니다.
.
2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
- 종료 타이밍 구성.재부팅 타이밍 매개변수를 변경하는 방법을 추가로 조사할 수도 있습니다.
man systemd-system.conf
다음 단락을 보고 확인하세요:DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=
. 기본값은 90초입니다.