[Jenkins, Docker] docker.sock: connect: permission denied
2025. 3. 18. 20:57ㆍTrouble Shootings/Infrastructure
1. 문제가 발생한 상황
DooD(Docker Out of the Docker) 방식으로 인프라를 구성하고 싶어, Jenkins 컨테이너를 실행할 때 도커 소켓과 도커에 대한 경로를 마운트하여 실행했습니다.
docker run -d --name jenkins \
--network pwandora_network \
-v /home/ubuntu/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-e JENKINS_OPTS="--prefix=/jenkins" \
-e TZ=Asia/Seoul \
--restart unless-stopped \
jenkins/jenkins:latest
이렇게 실행하면, Jenkins 컨테이너 내부에서도 /usr/bin/docker
경로에 도커 엔진이 존재하여 도커 명령어를 쓸 수 있게 됩니다. (EC2 호스트에 설치된 도커 엔진 경로와 마운트했기 때문이죠.)
하지만 도커 명령어를 알아들을 수 있을 뿐이지, 실행할 수 있는 권한은 없습니다. Jenkins는 Docker Daemon Socket에 대한 권한이 없기 때문입니다.

2. 해결 방법: Docker 그룹에 Jenkins 사용자 추가
우선, EC2 호스트에 설치된 Docker 그룹을 확인해보겠습니다.
getent group docker
# 실행 결과: docker:x:[번호]:ubuntu
위 실행 결과에서 얻어낸 번호를 토대로, 다음 명령어를 통해 Jenkins를 EC2 도커 그룹으로 추가해보겠습니다.
# EC2 호스트에서 Jenkins 도커 컨테이너로 루트 권한으로 접속
docker exec -it --user root jenkins bash
# Jenkins 컨테이너 내부에는 도커 그룹이 없을 테니, EC2 도커 그룹 번호로 도커 그룹 추가
groupadd -g [번호] docker
# Jenkins를 해당 도커 그룹에 추가
usermod -aG docker jenkins
# 그룹에 잘 추가됐는지 확인 -> [번호](Docker) 부분이 존재하면 잘 적용된 것
id jenkins
# jenkins 도커 컨테이너 나가기
exit
그리고 Jenkins
컨테이너를 재실행 해주세요. (중요!!)
docker restart jenkins
이후, 다시 Jenkins 컨테이너에 접속해서 도커 명령어를 쳐보면, Docker socket에 대한 권한을 가지고 있어 잘 수행되는 것을 볼 수 있을 겁니다.
728x90
반응형
'Trouble Shootings > Infrastructure' 카테고리의 다른 글
[Docker] Image 중첩을 통해, 빌드 시간 단축하기 (0) | 2025.03.30 |
---|---|
[Jenkins] 역방향 프록시 설정이 잘못되었습니다. (0) | 2025.03.22 |
[Jenkins] ERROR: Error fetching remote repo 'origin' (권한 문제) (0) | 2025.03.18 |
[Nginx] 413 Error: Request Entity Too Large (0) | 2025.02.16 |