Jenkins에서 docker build시, docker.sock 권한 에러 발생 해결
에러 상황
발생 위치
Jenkins에서 배포 과정을 실행하며 다음과 같은 오류가 발생하였습니다.
- 에러가 발생한 파이프라인의 명렁어
1
$ docker build -f Dockerfile -t pochakgreen/pochak-dev .
원인 확인
아래의 로그로 확인해봤을때, docker.sock
실행 과정에서 permission denied
권한 에러가 발생하였습니다.
에러 해결과정을 정리해보겠습니다!
- 로그
1
2
3
4
5
6
7
8
9
10
jenkins@fbfbfcdce8e0:~/workspace/dev-pipeline$ docker build -f Dockerfile -t pochakgreen/pochak-dev .
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
...
: dial unix /var/run/docker.sock: connect: permission denied
환경
호스트 환경
- Ubuntu 20.04.6 LTS
- Docker version 27.1.2
- Jenkins Version 2.473 : 도커 컨테이너로 실행
도커 컨테이너
다음과 같은 명령어를 통해 도커 소켓을 마운트해서 Jenkins 컨테이너를 실행시키고 있습니다.
1
2
3
4
5
$ docker run \
-itd --name jenkins \
-p 9090:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:jdk17
해결 과정
docker.sock의 권한 확인
먼저 docker container로 접속해서 docker.sock
의 권한을 확인합니다.
1
2
$ docker exec -it jenkins /bin/bash
$ ls -al /var/run/
docker.sock
파일의 그룹 권한이 이름이 없고 GID 998
로 설정되어 있는 것을 확인할 수 있습니다.
따라서 앞으로의 해결 과정은
docker
그룹을 만들어서jenkins
유저를docker
그룹에 넣어주고,docker
그룹에docker.sock
실행권한을 부여해줄 예정입니다.
docker
그룹 설정
먼저 젠킨스 컨테이너에 root 권한으로 접속합니다.
1
$ docker exec -itu0 jenkins /bin/bash # root로 접속
저는 기존에 docker 그룹이 없었기 때문에 새로 생성해 주었습니다.
- 이미 존재할 경우 새로 생성할 필요 없음!
1
$ groupadd docker
그 뒤, jenkins
유저를 그룹에 넣어주고,
docker 그룹에 docker.sock
실행권한을 부여하였습니다.
1
2
$ usermod -aG docker jenkins
$ chown root:docker /var/run/docker.sock
docker.sock
실행권한 확인
다시 젠킨스로 접속하여 docker.sock
의 권한을 확인하면,
docker 그룹에 실행 권한이 생긴걸 확인할 수 있습니다.
1
2
$ docker exec -itu0 jenkins /bin/bash # 다시 jenkins로 접속
$ ls -al /var/run/
또한 아래의 명령어를 통해 docker
그룹 안에 jenkins
유저가 있는 것도 확인할 수 있습니다.
1
$ cat /etc/group | grep docker
jenkins 재시작
이렇게 권한을 모두 확인하였음에도 “바로” jenkins 파이프라인을 실행시키면, 동일한 오류가 발생합니다.
재시작을 하지 않고, 파이프라인에 id
명령어를 통해 확인해보니, jenkins
유저에 docker
그룹이 빠져있는 것을 확인할 수 있었습니다.
참고로 터미널에서 jenkins 컨테이너에 접속해서 확인해봤을 때는 docker 그룹도 잘 나오는 상태였습니다.
따라서 jenkins 컨테이너를 재시작하고 다시 파이프라인을 실행하면, 다음과 같이 docker
그룹도 확인할 수 있고, 배포 과정도 정상적으로 수행됩니다!