피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Unprivileged LXC 내 Docker의 sysctl 권한 충돌 해결 및 설정 계층 최적화
Unprivileged LXC + Docker: The runc Sysctl Permission Trap
AI 요약
Context
Proxmox 기반 Unprivileged LXC 내 Docker 환경에서 커널 파라미터 수정 시 발생하는 Permission denied 오류 분석. User Namespace 매핑으로 인해 컨테이너 내부 root 사용자가 호스트의 비특권 사용자(UID 100000)로 처리됨에 따른 커널 보안 제약 발생.
Technical Solution
- runc가 수행하는 컨테이너 생성 단계의 sysctl 적용 시도를 포기하고 설정 계층을 상위로 이동
- 호스트의 LXC 설정 파일(.conf)에
lxc.sysctl지시어를 직접 정의하여 컨테이너 초기화 전 파라미터 주입 - 전역 설정이 필요한 항목의 경우 호스트의
/etc/sysctl.conf에 정의하여 커널 레벨에서 제어 - LXC pre-start hook을 활용해
/etc/sysctl.d/에 설정 파일을 동적으로 생성하는 구조 설계 - Docker 데몬 재시작이 아닌 LXC 컨테이너 전체 재시작을 통한 커널 파라미터 런타임 반영
실천 포인트
1. Unprivileged LXC 내 Docker 사용 시 `nesting=1`, `keyctl=1` 설정 확인
2. `sysctl` 수정 필요 시 컨테이너 내부가 아닌 Proxmox `.conf` 파일의 `lxc.sysctl` 옵션 검토
3. NFS 마운트 시 호스트와 컨테이너 간 UID mismatch(0 vs 100000) 여부 확인 및 ID 매핑 설정
4. 복잡한 권한 전쟁 방지를 위해 대규모 클러스터 전환 시 Bare-metal Kubernetes 도입 고려