본문 바로가기

devOps/kubernetes

[minikube] minikube에서 로컬 이미지를 띄울 때, Failed to pull image 해결 방법

728x90

 

보통 로컬에서 개발한 docker image를 테스트하기 위해 로컬에서 minikube를 사용해서 테스트한다.

minikube에서 local docker image를 띄우려 할 때 image를 가져오지 못하는 경우가 있다.

 

문제 상황

로컬에 있는 이미지를 쿠버네티스에 띄우려 하면 아래와 같은 오류를 만날 수 있다.

kubectl create deployment my-node --image=[local image]:[tag]

클러스터 이벤트를 확인하면 이미지를 받아올 수 없다고 한다.

$ kubectl get events
29s         Warning   Failed                    pod/my-image-bd4d78684-96khf     Failed to pull image "my-image": rpc error: code = Unknown desc = Error response from daemon: pull access denied for shinhan_doccano, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
29s         Warning   Failed                    pod/my-image-bd4d78684-96khf     Error: ErrImagePull

에러 문구가 친절하다.

이미지를 가져오는데 실패했다(Failed to pull image)고 한다

docker login이 필요하다고 하는데 docker login을 진행해도 안된다.

Minikube에는 별도의 docer repository 공간이 존재한다.

로컬과 minukube는 연결되어있지 않아서 minikube에서 로컬 이미지를 가져올 수 없다.

 

해결방법

로컬 도커 데몬이 minikube 내부 도커 공간에 접근할 수 있도록 환경변수를 설정한다.

 

1. 환경 변수를 설정한다

단, 각 터미널에서 일회성으로만 사용되기 때문에, 터미널이 종료되면 다시 환경변수를 설정해야 한다.

eval $(minikube -p minikube docker-env)

 

2. 이미지를 다시 빌드한다

docker build -t my-image .

3. 이미지를 띄어본다

4. 그래도 안되면 imagePullPolicy를 Never로 설정해서 kubernetes 가 이미지를 다운로드하지 않게 한다.

 

추가

해당 문제가 발생하는 이유가 minikube repo에 이미지가 없기 때문이다.

위 방법 말고도 minikube repo로 이미지를 넘기는 방법이 총 8가지가 있다. (1개는 이 포스트에서 언급한 것)

그 중에는 아래와 같이 명령어 하나로 간단하게 끝나는 것도 있다.

minikube image load my_image

https://minikube.sigs.k8s.io/docs/handbook/pushing

 

참고

https://medium.com/swlh/how-to-run-locally-built-docker-images-in-kubernetes-b28fbc32cc1d