포스트

Jenkins에서 docker build시, docker.sock 권한 에러 발생 해결

에러 상황

발생 위치

Jenkins에서 배포 과정을 실행하며 다음과 같은 오류가 발생하였습니다.

error 에러 발생!!

  • 에러가 발생한 파이프라인의 명렁어
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로 설정되어 있는 것을 확인할 수 있습니다.

check-permission

따라서 앞으로의 해결 과정은

  1. docker 그룹을 만들어서
  2. jenkins 유저를 docker 그룹에 넣어주고,
  3. 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

group-setting

docker.sock 실행권한 확인

다시 젠킨스로 접속하여 docker.sock의 권한을 확인하면,
docker 그룹에 실행 권한이 생긴걸 확인할 수 있습니다.

1
2
$ docker exec -itu0 jenkins /bin/bash # 다시 jenkins로 접속
$ ls -al /var/run/

permission


또한 아래의 명령어를 통해 docker 그룹 안에 jenkins 유저가 있는 것도 확인할 수 있습니다.

1
$ cat /etc/group | grep docker

img

jenkins 재시작

이렇게 권한을 모두 확인하였음에도 “바로” jenkins 파이프라인을 실행시키면, 동일한 오류가 발생합니다.


재시작을 하지 않고, 파이프라인에 id 명령어를 통해 확인해보니, jenkins 유저에 docker 그룹이 빠져있는 것을 확인할 수 있었습니다.

img

참고로 터미널에서 jenkins 컨테이너에 접속해서 확인해봤을 때는 docker 그룹도 잘 나오는 상태였습니다. img


따라서 jenkins 컨테이너를 재시작하고 다시 파이프라인을 실행하면, 다음과 같이 docker 그룹도 확인할 수 있고, 배포 과정도 정상적으로 수행됩니다!

img

img 해결 완료!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.