DS's TechBlog
[Jenkins] Jenkins 컨테이너에서 Docker CLI 사용 문제 해결 본문
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에 푸시하려 할 때, 아래와 같은 두 가지 문제가 발생했습니다.
- Docker CLI 미포함 문제
기본 Jenkins 이미지에는 Docker CLI가 포함되어 있지 않아 “docker: not found”라는 에러가 발생했습니다. - 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를 직접 추가하는 방법으로 문제를 해결했습니다. 읽어주셔서 감사합니다.
'Tools' 카테고리의 다른 글
[Nginx] Nginx + Jenkins 의 경로 문제 해결 (0) | 2025.03.29 |
---|---|
[Jenkins] Jenkins Docker-Hub Push 권한 문제 트러블 슈팅 (0) | 2025.03.22 |
[Docker] Docker Compose에서 OpenVidu와 Spring Boot 연동 시 네트워크 문제 해결 (0) | 2025.01.29 |
[Docker] Windows + Docker Desktop에서 network_mode: host 적용 안되는 문제 (0) | 2025.01.29 |
[Docker] Docker + ufw 적용 안되는 문제 (0) | 2025.01.12 |