도커를 실행하는 LXC 컨테이너가 있습니다. 많은 컨테이너가 성공적으로 실행되고 있지만 더 이상 추가할 수 없습니다. 새 Docker 컨테이너를 배포하려고 하는데 다음 오류가 발생합니다.
container init caused "join session keyring: create session key: disk quote exceeded": unknown
그러나 컨테이너에는 충분한 여유 공간이 있으며 호스트도 마찬가지입니다. 나는 df -h
이것을 and 로 확인했습니다 df -i
(따라서 인덱스 노드가 아닙니다)
이 오류는 무엇을 의미하며 해결 방법은 무엇입니까?
답변1
여기서 문제는 루트 파일 시스템이 아니라,커널 키링.이 LXC 스레드매우 잘 설명되어 있으며 다음과 같은 해결책이 있습니다.LXC 호스트(LXC 컨테이너 내에 있지 않음) 다음과 같이 최대 키 수를 늘리십시오.
echo 5000 | sudo tee /proc/sys/kernel/keys/maxkeys
5000
물론 임의적입니다. 현재 가지고 있는 숫자보다 더 큰 숫자를 선택하세요.
LXD 관리자 Stéphane Graber의 말을 인용하자면,스레드에서:
Docker가 커널 키링을 사용하려고 하는 것 같나요? 이건 그들의 새로운 행동임에 틀림없어...
그리고 seamus에 대한 신용또한 이 스레드에서제공된 명령으로 문제가 해결되었습니다.
답변2
@Josh의 답변에 추가합니다. 재부팅 후에도 이 변경 사항이 유지되도록 하려면 /etc/sysctl.d
업데이트된 커널 값으로 아래 파일을 생성 하면 됩니다.
# /etc/sysctl.d/99-custom.conf
kernel.keys.maxkeys=2000
중첩된 컨테이너나 권한이 없는 컨테이너를 많이 시작하는 경우 UID 1000000과 같이 매핑된 사용자가 소유한 많은 프로세스를 갖게 될 수 있습니다.
- 사용자당 최대 키 제한:kernel.keys.maxkeys는 사용자별인가요, 키별인가요?
- sysctl 변수 설정
- 이 변수에 대한 추가 문서:https://www.kernel.org/doc/html/latest/security/keys/core.html