[트러블슈팅 - Docker] E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
에러메세지 / 문제상황
컨테이너 내에서 명령어 실행 시 apt-get update 실행 시 다음과 같은 권한 에러 발생:
원인
컨테이너가 jenkins 사용자 권한으로 실행되고 있었으며, 해당 사용자는 apt 명령 실행에 필요한 시스템 디렉토리에 대한 쓰기 권한이 없음. jenkins 이미지는 기본적으로 루트가 아닌 사용자로 동작함.
시도 1
services:
jenkins:
image: jenkins/jenkins:lts
ports:
- "8080:8080"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
→ Docker 소켓 공유는 있었으나, root 권한 설정이 없어 apt 실행 불가.
시도 2
컨테이너 내부(exec)에서 강제 수행을 위해 sudo apt-get update 실행 시도.
결과: sudo: command not found.
기본 이미지에 sudo가 포함되지 않음.
시도 3
services:
jenkins:
image: jenkins/jenkins:lts
user: jenkins
group_add:
- "${DOCKER_GID}"
ports:
- "8080:8080"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
→ 보안 목적상 jenkins 유저로 제한하고 group_add 설정을 통해 Docker 소켓 접근 권한을 주었으나, 여전히 apt, groupadd, usermod 실행 불가.
시도 4
services:
jenkins:
image: jenkins/jenkins:lts
user: root
group_add:
- "${DOCKER_GID}"
ports:
- "8080:8080"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
→ 컨테이너를 root 사용자로 실행하여 apt 관련 시스템 명령이 정상 작동함.
해결책
docker-compose.yml에 user: root 옵션 추가.
컨테이너를 루트 사용자 권한으로 실행함으로써 apt, groupadd, usermod 등 시스템 명령 실행 가능해짐.
Jenkins는 여전히 컨테이너 내에서 자체적으로 jenkins 사용자로 실행되므로 보안상 큰 문제 없음
회고 및 정리
Jenkins 컨테이너에서 시스템 명령어(apt, groupadd 등)를 실행하기 위해 user: root 설정을 적용하였다.
일반적으로 Docker 컨테이너는 사용자 공간이 호스트와 격리되어 있어, 컨테이너 내 root 권한은 호스트 시스템의 보안에 직접적인 위협이 되지 않는다.
따라서 컨테이너 내부에서 root로 실행해도 시스템 자원을 침해하지 않으며, 제한된 범위 내에서 필요한 작업만 수행할 수 있다.
또한 Jenkins 공식 Docker 이미지는 내부적으로 Jenkins 프로세스를 별도의 일반 사용자(jenkins)로 실행하는 구조이기 때문에
컨테이너가 root로 시작되더라도 Jenkins 서비스는 최소 권한 환경에서 운영된다.
이로 인해 시스템 도구 설치나 Docker CLI 접근과 같은 자동화 작업은 루트 권한으로 처리하면서도,
Jenkins 자체는 보안 측면에서 안전하게 동작할 수 있다.
결론적으로, 이 구성은 Docker 환경 내에서 실용성과 보안을 모두 고려한 현실적인 운영 방식이며,
user: root 설정은 Jenkins 컨테이너 운영에 있어 유효하고 안정적인 선택이었다.