컴공생의 발자취

Jenkins DooD 권한 문제 해결하기 (feat. troubleshooting) 본문

🐳 Docker

Jenkins DooD 권한 문제 해결하기 (feat. troubleshooting)

MNY 2024. 9. 25. 16:55
728x90
반응형

📌 문제 상황

Jenkins 내부에 Docker CLI를 설치했으나, 다음과 같은 권한 문제로 인해 Docker 명령어 실행이 불가능했다.

ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied

 

해당 문제는 Jenkins가 Docker 데몬에 접근할 수 있는 권한이 없어서 발생했다.

 

🤔 고민 및 시도한 내용

1. Jenkins 컨테이너 내부 접속
먼저, Jenkins 컨테이너에 root 사용자로 접속한 후 Docker 그룹에 Jenkins 사용자를 추가하려고 했다.

docker exec -u root -it jenkins /bin/bash

 

2. Jenkins 재시작

그룹 변동사항이 생길 경우, Jenkins를 재시작해야 한다.

docker restart jenkins

 

3. Docker 그룹 확인 및 설정
Jenkins 사용자를 Docker 그룹에 추가하기 위해 다음과 같은 방법을 시도했다.

// `docker` 그룹이 있는지 확인
getent group docker

// `docker` 그룹이 없으면 생성
groupadd docker

// Jenkins 사용자를 docker 그룹에 추가
usermod -aG docker jenkins

 

4. Docker 그룹 GID 설정
Docker 그룹의 GID를 호스트와 동일하게 설정했다.

// docker group gid 확인
getent group docker

// docker group gid 변경
groupmod -g 113 docker

// Jenkins 사용자를 docker 그룹에 추가
usermod -aG docker jenkins

 

5. 호스트 시스템에서 Docker 소켓 권한 재설정
마지막으로, 호스트 시스템에서 Docker 소켓의 권한을 재설정했다.

sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

 

💡 해결 방법

이 모든 시도를 통해서도 문제가 해결되지 않았다. 결국, Dockerfile을 만들어 Jenkins 컨테이너를 재구성하기로 결정했다.

해결 방법으로 작성한 Dockerfile은 다음과 같다.

FROM jenkins/jenkins:2.452.3

USER root
RUN apt-get -y update && \
     apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common && \
     curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - && \
     add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" && \
     apt-get -y update && \
     apt-get -y install docker-ce docker-ce-cli containerd.io
RUN usermod -u  1000 jenkins && \
    groupmod -g 113 docker && \
    usermod -aG docker jenkins

USER jenkins

이렇게 설정한 후 Jenkins를 실행하니, Docker 명령어를 정상적으로 사용할 수 있었다.

 

🔍 마무리

이번 경험을 통해 Jenkins와 Docker의 통합 작업에서 발생할 수 있는 권한 문제를 효과적으로 해결할 수 있었다. Docker-outside-of-Docker(DooD) 방식으로 Jenkins와 Docker를 연동할 때는 권한 설정이 매우 중요하다는 것을 깨닫게 되었다. 앞으로도 이러한 경험을 바탕으로 더 나은 개발자로 성장해 나갈 것이다!!! 😆

728x90
반응형

'🐳 Docker' 카테고리의 다른 글

Docker 설치 (feat. Mac)  (0) 2024.07.04
Docker Image와 Container  (0) 2024.07.02
[Docker] Docker란? 개념 설명  (0) 2023.10.26