일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MySQL
- 컴퓨터구조론 5판
- 99일지
- 개발자블로그
- 국비
- AWS
- 스파르타내일배움캠프WIL
- til
- 부트캠프
- Python
- 중심사회
- 자바
- 개인공부
- 개발자스터디
- java
- 백준
- 코딩테스트
- 내일배움캠프
- 컴퓨터개론
- wil
- 운영체제
- 스파르타코딩클럽
- Spring
- 소프트웨어
- 스파르타내일배움캠프TIL
- 항해
- Flutter
- 프로그래머스
- 99클럽
- 스파르타내일배움캠프
- Today
- Total
컴공생의 발자취
Jenkins DooD 권한 문제 해결하기 (feat. troubleshooting) 본문
📌 문제 상황
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를 연동할 때는 권한 설정이 매우 중요하다는 것을 깨닫게 되었다. 앞으로도 이러한 경험을 바탕으로 더 나은 개발자로 성장해 나갈 것이다!!! 😆
'🐳 Docker' 카테고리의 다른 글
AWS EC2에 .env 파일로 Docker 환경변수 관리하기 (feat. docker-compose) (0) | 2024.10.03 |
---|---|
Docker를 활용해 AWS EC2에 Spring Boot 배포하기 (feat. Nginx) (2) | 2024.10.01 |
Docker 설치 (feat. Mac) (0) | 2024.07.04 |
Docker Image와 Container (0) | 2024.07.02 |
[Docker] Docker란? 개념 설명 (0) | 2023.10.26 |