systemd가 dockerd에 종료 신호를 보내는 이유를 조사하려고 합니다. 이것은 이것과 관련이 있습니다스택 오버플로 포스트.
$ journalctl -r
Dec 01 06:25:05 ip-10-38-4-210 dockerd[2218]: time="2020-12-01T06:25:05.867748396Z" level=info msg="Processing signal 'terminated'"
Dec 01 06:25:05 ip-10-38-4-210 systemd[1]: Stopping Docker Application Container Engine...
Dec 01 06:25:03 ip-10-38-4-210 CRON[23453]: pam_unix(cron:session): session closed for user root
Dec 01 06:25:01 ip-10-38-4-210 systemd[1]: Starting Daily apt upgrade and clean activities...
Dec 01 06:25:01 ip-10-38-4-210 CRON[23454]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
Dec 01 06:25:01 ip-10-38-4-210 CRON[23453]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 01 06:17:01 ip-10-38-4-210 CRON[23441]: pam_unix(cron:session): session closed for user root
Dec 01 06:17:01 ip-10-38-4-210 CRON[23442]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 01 06:17:01 ip-10-38-4-210 CRON[23441]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 01 06:06:54 ip-10-38-4-210 CRON[23406]: pam_unix(cron:session): session closed for user root
docker가 중지되기 전 마지막 로그 항목은 입니다 CRON[23453]: pam_unix(cron:session): session closed for user root
. 이 항목이 관련성이 있는 것 같나요?
이것은 x86-64의 Ubuntu 16.04.6 LTS에 있습니다.
답변1
이 특별한 경우 systemd에게 docker 서비스를 중지하라고 지시하는 것은 Ubuntu 무인 업데이트 서비스가 업데이트된 Ubuntu 버전의 컨테이너d 패키지를 적용한다는 것입니다. 오늘날 많은 사람들이 동일한 문제로 영향을 받고 있음을 암시하는 공개 질문이 있습니다.
https://bugs.launchpad.net/ubuntu/+source/containerd/+bug/1870514
이 링크에 있는 저널은 다음과 같습니다:
Apr 03 06:09:31 server systemd[1]: Starting Daily apt upgrade and clean activities...
...
Apr 03 06:09:43 server systemd[1]: Stopping Docker Application Container Engine...
제가 제안하는 해결 방법은 업스트림 Docker 저장소에서 Docker를 설치하는 것인데, 이 문제는 없는 것 같습니다.
답변2
이미 승인된 답변이 있다는 것을 알고 있지만...
docker가 중지되기 전 마지막 로그 항목은 CRON[23453]: pam_unix(cron:session): 사용자 루트에 대해 반환된 세션입니다. 이것이 관련성이 있다고 보십니까?
예, 관련성이 있는 것 같지만 이 경우에는 그렇지 않습니다. 이 문제에 직면한 뿌리 없는 도커를 실행하는 미래의 사람들이 해결책을 얻을 수 있도록 여기에 답변합니다.
-d
루트 없는 모드로 도커를 설정하고 ubuntu
내 사용자(AWS Lightsail 인스턴스) 아래에서 분리 모드(플래그)로 장기 실행 도커 컨테이너를 호스팅하려고 합니다. 이로 인해 docker 데몬과 컨테이너가 정상적으로 종료됩니다.
해결책
숙박 가능
sudo loginctl enable-linger $USER
확실히 하기 위해 /etc/systemd/logind.conf
다음 줄을 편집하여 끝에 추가하세요.
UserStopDelaySec=infinity
KillUserProcesses=no
새 구성을 적용하려면 컴퓨터를 다시 시작하십시오.
sudo reboot
범죄자
문제는 systemd
로그인 세션(SSH 터미널 세션)으로 시작된 프로세스를 처리하는 방식에 있습니다. 기본적으로 사용자가 로그아웃한 후 프로세스로 systemd
전송됩니다 .SIGTERM
10s
문서에 따르면.
UserStopDelaySec=
사용자 기록 및 사용자별 서비스를 보관할 기간을 지정하세요.[이메일 보호됨]사용자가 완전히 로그아웃된 후. 0으로 설정하면 사용자의 마지막 세션이 종료되는 즉시 사용자별 서비스가 종료됩니다. 이 옵션을 0이 아닌 값으로 구성하면 사용자의 서비스 관리자가 지속적으로 다시 시작되지 않으므로 빠른 로그오프/로그인 주기가 가속화됩니다. "무제한"으로 설정하면 사용자의 사용자별 서비스는 첫 번째 로그인 이후 더 이상 종료되지 않으며 시스템이 종료될 때까지 계속 실행됩니다. 기본값은 10초입니다.
KillUserProcesses=
부울 매개변수를 사용합니다. 사용자가 로그오프할 때 사용자의 프로세스를 종료해야 하는지 여부를 구성합니다. true인 경우 세션에 해당하는 범위 단위와 해당 범위 내의 모든 프로세스가 종료됩니다. false인 경우 범위는 "폐기"됩니다(systemd.scope(5) 참조). 프로세스는 종료되지 않습니다.기본값은 "아니요"입니다.하지만 아래의 KillOnlyUsers= 및 KillExcludeUsers= 옵션을 참조하세요.
물론 링거 모드가 활성화되어 있지 않는 한,여기에 녹음하세요
enable-linger [USER...], disable-linger [USER...]
한 명 이상의 사용자에 대해 사용자 지연을 활성화/비활성화합니다. 특정 사용자에 대해 활성화된 경우 시작 시 해당 사용자에 대한 사용자 관리자가 생성되고 로그아웃 후에도 유지됩니다. 이를 통해 로그인하지 않은 사용자가 장기 실행 서비스를 실행할 수 있습니다. 하나 이상의 사용자 이름 또는 숫자 UID를 인수로 사용합니다. 인수가 지정되지 않으면 호출자 세션 사용자에 대한 지연을 활성화/비활성화합니다.
나그것에 대해 블로그를 썼습니다자세한 내용은 확인하고 싶으시면 보실 수 있습니다.