필자는 Jenkins를 Docker로 띄워서 여러 CI/CD에 적용하고 있다.
예를 들면 이 기술 블로그인 Spring-boot 프로젝트 배포, 개인 프로젝트 Android 앱 or 라이브러리들, 디스코드 봇 등에 적용해서 관리하고 있는데 가끔 심심치 않게 만나는 이슈가 있다. Jenkins job이 실패하면서 로그에 다음 내용과 같은 Docker의 연결을 담당하는 docker.sock 파일에 권한이 없다는 에러를 만나게 된다.
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
이러한 경우 매번 구글링으로 찾아서 해결했었는데, 다시 안 찾아볼 수 있게 적어두려한다.
다음과 같은 명령어를 순서대로 입력하여 Jenkins의 docker container에 접속 후 권한을 주면 된다.
// EC2 인스턴스
$ docker exec -it {Jenkins container name or id} /bin/bash
// Jenkins conatiner 내부
# groupadd docker
# usermod -a -G docker jenkins
# chown root:docker /var/run/docker.sock