JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

이미지가 없다고 에러가 뜨는 이유 (이미지 풀 정책)

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
쿠버네티스
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
slug
image-pull-policy-error-explanation
type
post
updatedAt
Dec 6, 2025 04:46 AM

✅ 이미지가 없다고 에러가 뜨는 이유

이전에 Spring Boot 프로젝트를 이미지로 빌드해서 파드로 띄웠다. 하지만 ImagePullBackOff라는 에러가 발생했다. 이 문제는 이미지 풀 정책(Image Pull Policy) 때문에 발생한 것이다. 이미지 풀 정책이 뭔지 알아보자.
notion image
 

✅ 이미지 풀 정책 (Image Pull Policy)

이미지 풀 정책(Image Pull Policy)이란 쿠버네티스가 yaml 파일을 읽어들여 파드를 생성할 때, 이미지를 어떻게 Pull을 받아올 건지에 대한 정책을 의미한다. 어떤 정책들이 있는 지 알아보자.
 
  1. Always
    1. 로컬에서 이미지를 가져오지 않고, 무조건 레지스트리(= Dockerhub, ECR과 같은 원격 이미지 저장소)에서 가져온다.
       
  1. IfNotPresent
    1. 로컬에서 이미지를 먼저 가져온다. 만약 로컬에 이미지가 없는 경우에만 레지스트리에서 가져온다.
       
  1. Never
    1. 로컬에서만 이미지를 가져온다.
 

✅ 매니페스트 파일에 이미지 풀 정책 설정하는 방법

apiVersion: v1 kind: Pod metadata: name: spring-pod spec: containers: - name: spring-container image: spring-server ports: - containerPort: 8080 imagePullPolicy: Always
 

✅ 기존 매니페스트 파일 다시 살펴보기

spring-pod.yaml
apiVersion: v1 kind: Pod metadata: name: spring-pod spec: containers: - name: spring-container image: spring-server ports: - containerPort: 8080
위의 매니페스트 파일에서는 이미지 풀 정책을 따로 설정하지 않았다. 이럴 때는 아래와 같이 작동한다.
  • 이미지의 태그가 latest이거나 명시되지 않은 경우 : imagePullPolicy는 Always로 설정됨
  • 이미지의 태그가 latest가 아닌 경우 : imagePullPolicy는 IfNotPresent로 설정됨
 
따라서 기존 매니페스트 파일은 imagePullPolicy가 Always로 작동했던 것이다. 즉, 로컬에서 이미지를 가져오지 않고 레지스트리에서 가져오려고 했다. 하지만 spring-server라는 이미지는 Dockerhub에 올린 적이 없기 때문에 이미지를 못 받아온 것이다. 따라서 아래와 같이 에러가 떴다.
notion image
 
그러면 어떻게 해야 로컬에 있는 이미지를 가져올 수 있을까?
spring-pod.yaml
apiVersion: v1 kind: Pod metadata: name: spring-pod spec: containers: - name: spring-container image: spring-server ports: - containerPort: 8080 imagePullPolicy: IfNotPresent
위와 같이 정책을 설정해주어야 로컬에서 이미지를 가져오게 된다.
 
기존 파드를 삭제하고 다시 생성해보자.
$ kubectl delete pod spring-pod $ kubectl apply -f spring-pod.yaml $ kubectl get pods
notion image
 
 
Spring Boot 서버에 요청을 보내서 잘 응답하는 지도 알아보자.
방법 1. 파드 내부로 들어가서 요청보내기
$ kubectl exec -it spring-pod -- bash $ curl localhost:8080
 
방법 2. 포트 포워딩 활용하기
# 포트 $ kubectl port-forward pod/spring-pod 12345:8080
notion image
notion image
 
 

✅ 파드 삭제하기

$ kubectl delete pod spring-pod
 
author
category
쿠버네티스
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
slug
type
series-footer
updatedAt
Dec 6, 2025 04:46 AM
📎
이 글은 비전공자도 이해할 수 있는 쿠버네티스 입문/실전 강의의 수업 자료 중 일부입니다.