Tae4an / Smart-Office

WebRTC & AI 기반 기업 맞춤형 차세대 통합 스마트 오피스 솔루션
2 stars 2 forks source link

Jenkins Docker 데몬 연결 및 권한 관련 오류 해결 #23

Open Tae4an opened 6 days ago

Tae4an commented 6 days ago

[Jenkins] Docker 데몬 연결 및 권한 관련 오류 해결 가이드

🚨 문제 상황

Jenkins 파이프라인에서 Docker 관련 명령어 실행 시 다음과 같은 오류들이 발생할 수 있습니다.

에러 케이스 1: Docker 데몬 연결 오류

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

에러 케이스 2: Docker 소켓 권한 오류

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: 
Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?...": 
dial unix /var/run/docker.sock: connect: permission denied

🔍 원인 분석

Docker 데몬 연결 오류의 원인

  1. Docker 소켓이 컨테이너에 마운트되지 않음
  2. Jenkins 컨테이너 내부에 Docker CLI 미설치
  3. Docker 데몬이 실행되지 않음

권한 오류의 원인

  1. Jenkins 컨테이너의 jenkins 사용자에게 Docker 소켓 접근 권한 부재
  2. Docker 소켓의 부적절한 권한 설정
  3. 호스트 시스템의 Docker 소켓 권한 설정 누락

✅ 해결 방법

1. Jenkins 컨테이너 재설정

# 기존 컨테이너 중지 및 삭제
docker stop jenkins
docker rm jenkins

# Docker 소켓을 마운트하여 재실행
docker run -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name jenkins \
  --group-add $(getent group docker | cut -d: -f3) \
  jenkins/jenkins:lts

2. Docker CLI 설치 및 권한 설정

# Jenkins 컨테이너에 진입
docker exec -it --user root jenkins bash

# Docker CLI 설치
apt-get update && apt-get install -y docker.io

# Docker 소켓 권한 설정
chmod 666 /var/run/docker.sock

# Jenkins 사용자에게 Docker 그룹 권한 부여
usermod -aG docker jenkins

# 컨테이너 재시작
exit
docker restart jenkins

3. 설정 확인

docker exec -it jenkins bash
docker ps
docker info

📋 Jenkins 파이프라인 예시

pipeline {
    agent any
    stages {
        stage('Docker Test') {
            steps {
                sh 'docker --version'
                sh 'docker ps'
                sh 'docker system prune -f'
            }
        }
    }
}

🔒 보안 고려사항

  1. 최소 권한 원칙 준수

    • 필요한 최소한의 권한만 부여
    • 정기적인 권한 검토 및 감사
  2. Docker 소켓 권한 관리

    • chmod 666 설정은 임시 해결책임을 인지
    • 프로덕션 환경에서는 더 제한적인 권한 설정 권장
  3. 대안적 접근 방법

    • Docker-in-Docker (DinD) 고려
    • Jenkins 에이전트 활용
    • 컨테이너 실행 권한 제한

🔄 문제 해결 후 조치사항

  1. 문서화

    • 설정 변경사항 기록
    • 트러블슈팅 가이드 업데이트
  2. 모니터링

    • Docker 데몬 상태 모니터링
    • 권한 관련 로그 모니터링
  3. 자동화

    • 초기 설정 자동화 스크립트 작성
    • 권한 설정 자동 확인

📚 추가 문제해결 팁

SELinux 관련 문제

# SELinux 상태 확인
getenforce

# 필요시 임시 비활성화
sudo setenforce 0

Docker 데몬 상태 확인

systemctl status docker

🔗 참고 문서

🏷️ 태그

#jenkins #docker #troubleshooting #permissions #security #devops #ci-cd #containerization