Jenkins Docker: not found 이슈 해결하기
젠킨스에 도커 소켓을 연결시켜주었음에도 불구하고 도커 명령어를 실행할 수 없기에 발생하는 오류를 해결하는 과정을 글로 남겨 보았습니다.
문제 상황
현재 내 서버는 proxmox VM 위에서 돌아가고 있으며,
VM > Docker > Jenkins 순으로 올라가있다 ( 관리는 portainer로 해주고 있다. )
이렇듯 도커 안에서 컨테이너로써 작동하고 있는 jenkins가 VM 위에 올라간 도커에다가 프로그램을 올릴수 있게 하기 위해서는,
-v /var/run/docker.sock:/var/run/docker.sock
옵션을 jenkins 컨테이너 실행시에 걸어서 호스트 환경에서의 도커 소켓에 jenkins가 접근할 수 있게 해주어야 한다.
이러한 조치를 마친 후에도 여전히 jenkins 상에서 빌드를 올렸을때
docker: not found
오류가 발생하는것을 발견할수 있었고, 이를 해결해보고자 한다.
접근
privileged mode 설정
검색해보자 바로 나왔던 첫번째 글에서, privileged mode로 실행시켜주라는 코멘트를 보았으나,
내 환경은 이미 privileged mode로 실행되고 있었고, 따라서 이 해결방법은 나한테 적용되는 것은 아니었다.
-v $(which docker):/usr/bin/docker
옵션을 통해 docker가 설치된 폴더 째로 넘겨줄 수 있다고 하던데, 이 경우를 지난번에 시도했다가 충돌이 발생해 정상작동하지 않음을 이미 확인한 바 있었고, 즉 위에서의 글은 크게 도움이 되지는 않았다.
터미널에 붙어보기
jenkins 내부의 터미널에 붙어서 체크해봤다.
docker exec -it --user root jenkins /bin/bash
docker
명령어가 제대로 실행되지 않는 것을 보아, jenkins의 문제라기 보다는 jenkins가 실행중인 도커 컨테이너에서의 문제라고 판단, 컨테이너 상에서 docker를 재설치하는것을 중점으로 찾아보았다.
도커 재설치
cat /etc/issue
명령어를 통해 jenkins가 실행되는 컨테이너가 debian 기반이라는것을 확인했고,
같은 데비안 분류에 속하는 우분투에 docker engine을 설치하는 공식 문서
를 참조하여
# 문제가 되었던 도커를 제거
apt remove docker docker-engine docker.io containerd runc
# 의존성 설치
apt update
apt install ca-certificates curl gnupg lsb-release
# 레포지토리
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 레포지토리 추가
echo "deb [arch="$(dpkg --print-architecture)" \
signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# 도커 설치하기
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
다음과 같은 명령어를 실행, 도커를 재설치해주었다.
이후
docker
명령어로 제대로 설치되었는지 확인하였고,
정상 출력을 확인한 후 빌드를 진행,
문제를 해결할 수 있었다.