Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
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
Tags
more
Archives
Today
Total
관리 메뉴

DS's TechBlog

[Jenkins] Jenkins 컨테이너에서 Docker CLI 사용 문제 해결 본문

Tools

[Jenkins] Jenkins 컨테이너에서 Docker CLI 사용 문제 해결

dsjo 2025. 3. 25. 22:08
docker build -f Dockerfile-my-jenkins -t myjenkins-docker:2.502 .

이번 글에서는 Jenkins를 Docker 컨테이너로 운영하면서, 파이프라인에서 docker build, docker push 등의 명령어를 실행할 때 겪었던 문제와 그 해결 과정을 공유하려 합니다. 제가 직접 겪은 문제 해결 과정을 중심으로 작성하겠습니다. Connecting Jenkins Docker Container to the Host’s Docker Daemon | Linux 글을 참고하였습니다.

 

배경

Jenkins 파이프라인을 이용해 Docker 이미지를 빌드하고 Docker Hub에 푸시하려 할 때, 아래와 같은 두 가지 문제가 발생했습니다.

  1. Docker CLI 미포함 문제
    기본 Jenkins 이미지에는 Docker CLI가 포함되어 있지 않아 “docker: not found”라는 에러가 발생했습니다.
  2. Docker 소켓 접근 권한 문제
    컨테이너 내의 Jenkins 사용자가 호스트의 Docker 데몬 소켓(/var/run/docker.sock)에 접근할 때, “permission denied” 오류가 발생했습니다.

첫 번째 시도

처음에는 커스텀 Jenkins 이미지를 생성하여 Docker CLI를 설치하는 방법을 시도했습니다. 아래와 같이 Dockerfile을 작성하여 Docker CLI를 설치하고, Jenkins 사용자를 docker 그룹에 추가했습니다.

# Dockerfile (Dockerfile-my-jenkins)
FROM jenkins/jenkins:2.502

USER root

# Docker CLI 설치 및 캐시 정리
RUN apt-get update && \
    apt-get install -y docker.io && \
    rm -rf /var/lib/apt/lists/*

# Jenkins 사용자를 docker 그룹에 추가 (이 방법을 먼저 시도했으나, 문제를 완전히 해결하지 못함)
RUN usermod -aG docker jenkins

USER jenkins

이미지는 아래 명령어로 빌드했습니다.

docker build -f Dockerfile-my-jenkins -t myjenkins-docker:2.502 .

 

하지만, 컨테이너 실행 후에도 여전히 Docker 소켓에 접근할 때 "permission denied" 오류가 발생했습니다.
호스트의 Docker 데몬 소켓 권한 문제를 좀 더 깊이 파헤쳐 보았습니다.

 

해결 방안

호스트에서 getent group docker 명령어를 실행해 보니 docker 그룹의 GID가 999로 설정되어 있었습니다.

컨테이너 내부에서 Jenkins 사용자가 속한 docker group의 gid는 다음과 같았습니다.

ubuntu@ip-?-?-?-?:docker exec -it jenkins bash
jenkins@cfb5df777407:/$ id
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),103(docker)

결과를 보면, 컨테이너 내부에서 Jenkins 사용자가 속한 docker 그룹의 GID가 103으로 나타납니다.

즉, Dockerfile 내의 설정만으로는 호스트의 docker 그룹 GID를 컨테이너에 올바르게 반영할 수 없다는 것을 알게 되었습니다.

그래서 컨테이너 실행 시, --group-add 999 옵션을 명시적으로 추가하여 문제를 해결했습니다.

sudo docker run -d -p 8080:8080 \
  -v /home/ubuntu/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --group-add 999 \
  --name jenkins myjenkins-docker:2.502

이 명령어를 사용하면 컨테이너 내부의 Jenkins가 호스트의 Docker 데몬 소켓에 접근할 수 있어 docker 명령어가 정상 동작합니다.

결론

  • Docker CLI가 포함된 커스텀 Jenkins 이미지를 생성하고,
  • 컨테이너 실행 시 호스트의 docker 그룹 GID(예: 999)를 --group-add 999 옵션으로 추가해야 합니다.

처음 시도했던 RUN usermod -aG docker jenkins만으로는 해결되지 않아, 호스트 GID를 직접 추가하는 방법으로 문제를 해결했습니다. 읽어주셔서 감사합니다.