error

[kubernetes]ImagePullBackOffエラー

YOOANT 2026. 3. 17. 11:45

✅ 現状

ImagePullBackOffエラーが出力されている。

 

3.Pod - SpringBoot

✅ バックエンド (Spring Boot) サーバーを Pod として起動する1.Spring Boot プロジェクトのセットアップstart.spring.iohttps://start.spring.io/ 2.AppController@RestControllerpublic class AppController { @GetMapping("/") public St

tokyoant.tistory.com

✅ 原因調査

以前、Spring Boot プロジェクトをイメージとしてビルドし、Pod を起動しようとした。しかし、ImagePullBackOff というエラーが発生した。この問題は、イメージプルポリシー (Image Pull Policy) が原因で発生したものである。


✅ Image Pull Policy

イメージプルポリシーとは、クバーネティスがマニフェストファイルを読み込んで Pod を生成する際、イメージをどのように取得(Pull)するかを定義するポリシーである。主に以下の 3 つのポリシーが存在する。

  • Always: ローカルのイメージは使用せず、常にレジストリ(Docker Hub、ECR などのリモートリポジトリ)からイメージを取得する。
  • IfNotPresent: まずローカルのイメージを確認する。ローカルにイメージが存在しない場合のみ、レジストリから取得する。
  • Never: ローカルのイメージのみを使用し、レジストリからは取得しない。

✅ 既存のManifestファイル

spring-pod.yaml

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

上記のマニフェストファイルでは、イメージプルポリシーを個別に設定していない。設定を省略した場合、以下のように動作する。

  1. イメージのタグが latest であるか、明示されていない場合: imagePullPolicy はデフォルトで Always に設定される。
  2. イメージのタグが latest 以外である場合: imagePullPolicy はデフォルトで IfNotPresent に設定される。

したがって、既存のManifestファイルは imagePullPolicy が Always として動作していたのである。つまり、ローカルのイメージを使用せず、レジストリから取得しようとした。しかし、spring-server というイメージは Docker Hub にアップロードしたことがないため、イメージを取得できず、エラーが発生したのである。


✅ 解決方法

ローカルにあるイメージを使用するためには、以下のようにポリシーを明示的に設定する必要がある。

spring-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: spring-pod
spec:
  containers:
    - name: spring-container
      image: spring-server
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent # ローカルイメージを優先して使用

既存の Pod を削除し、再度生成。

$ kubectl delete pod spring-pod
$ kubectl apply -f spring-pod.yaml
$ kubectl get pods

✅ 動作確認

日本語