Jenkins를 Docker container로 생성해서 실행하면서 Docker outof Docker(DOOD) 형식을 채택하였습니다.
하지만 모두 정상적으로 했음에도 권한이 불가하다는 메세지를 받았습니다.
직접 Jenkins 컨테이너에 접속하여 usermod -aG docker jenkins 명령어를 입력하여 docker 그룹에 jenkins 사용자를 추가하였지만 해결되지 않았습니다. (getent group docker 를 입력하면 여전히 jenkins는 추가되어있지 않았음)
문제는 GID(GroupId)가 달라서였습니다. /var/run/docker.sock 파일은 호스트의 docker 그룹(GID) 소유하였지만 컨테이너 안에서 docker 그룹을 만들었어도, GID가 다르면 이름이 같더라도 다른 그룹으로 인식하였기 때문에 permission denied가 발생하였습니다. ( docker.sock 파일 소유 그룹은 GID=999, jenkins는 GID=1001(docker) )
services:
jenkins:
build:
context: .
dockerfile: Dockerfile
container_name: jenkins
ports:
- "9000:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
networks:
- jenkins-network
volumes:
jenkins_home:
networks:
jenkins-network:
driver: bridge
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release && \
mkdir -m 0755 -p /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io
RUN apt-get update && apt-get install -y awscli
RUN usermod -aG docker jenkins
USER jenkins
Dockerfile에서 명확하게 docker 그룹을 생성하고 usermod로 추가를 다시 해줘야 합니다.
그렇기 때문에 Dockerfile에 추가적인 작업을 진행하였습니다.
- Dockerfile에서 ARG DOCKER_GID로 GID 받아오기
- groupadd -forg ${DOCKER_GID} docker로 GID를 호스트와 맞추기
- usermod -aG docker jenkins 해서 jenkins를 docker 그룹에 추가
이렇게 하면 이미지 자체에 설정이 되기 때문에 영구적으로 적용되어 컨테이너를 재시작해도 유지 되었습니다.
결과
FROM jenkins/jenkins:lts
USER root
ARG DOCKER_GID=999
# docker 그룹 만들고 (이미 있으면 무시) jenkins 유저 추가
RUN groupadd -forg ${DOCKER_GID} docker && \
usermod -aG docker jenkins && \
apt-get update && apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release \
awscli && \
mkdir -p /etc/apt/keyrings && chmod 0755 /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
> /etc/apt/sources.list.d/docker.list && \
apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io && \
apt-get clean && rm -rf /var/lib/apt/lists/*
USER jenkins
'IT 서비스 > 모임 관리 플랫폼' 카테고리의 다른 글
1000TPS를 견디는 모임 서비스 (0) | 2025.04.28 |
---|
댓글