You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用本地Docker镜像创建K8s Pod时遇ErrImagePull错误求助

问题描述

本地Docker环境已有usm、kuard镜像,且usm容器正常运行,但在Minikube中执行kubectl run mypod --image=usm创建Pod后出现ErrImagePull;将imagePullPolicy设为Never后又出现ErrImageNeverPull,如何用本地Docker镜像成功运行Pod?


环境信息

Docker镜像列表

master* $ docker images                                              [15:16:49]                                                                                
REPOSITORY                    TAG           IMAGE ID       CREATED             SIZE
usm                           latest        4dd5245393bf   About an hour ago   158MB
kuard                         latest        497961f486c7   4 days ago          22.9MB

Docker容器状态

master* $ docker ps                                                  [15:21:40]
CONTAINER ID   IMAGE                                 COMMAND                  CREATED             STATUS             PORTS                                                                                                                                  NAMES
a46850d28303   usm                                   "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:6061->80/tcp, :::6061->80/tcp                                                                                                  usm
88471e086486   gcr.io/k8s-minikube/kicbase:v0.0.32   "/usr/local/bin/entr…"   2 days ago          Up 2 hours         127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp   minikube

Dockerfile内容

FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80

Kubernetes版本

master* $ minikube version                                           [15:37:13]
minikube version: v1.26.0
commit: f4b412861bb746be73053c9f6d2895f12cf78565

操作及错误记录

  1. 初始创建Pod
master* $ kubectl run mypod --image=usm
pod/mypod created

查看状态:

master* $ kubectl get pods                                           [15:07:49]
NAME    READY   STATUS         RESTARTS   AGE
mypod   0/1     ErrImagePull   0          6s
  1. 设置imagePullPolicy: Never后尝试
    Pod配置YAML:
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: usm
    imagePullPolicy: Never
    name: mypod
    ports:
    - containerPort: 80
      name: http
      protocol: TCP

创建Pod:

master* $ kubectl apply -f kube-pod-usm.yaml                         [15:55:39]
pod/mypod created

查看状态:

master* $ kubectl get pods                                           [15:55:54]
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ErrImageNeverPull   0          42s

解决方案

问题核心是:本地Docker镜像存储在宿主机上,但Minikube运行在独立的虚拟机容器(kicbase)中,宿主机的镜像并未同步到Minikube节点内,因此Kubernetes无法找到指定镜像。

步骤1:将本地镜像同步到Minikube节点

使用Minikube自带命令,把宿主机的usm镜像复制到Minikube虚拟机中:

minikube image load usm

步骤2:重新创建Pod

  • 方式一:用命令直接创建,指定镜像拉取策略
kubectl run mypod --image=usm --image-pull-policy=Never
  • 方式二:使用现有YAML文件重新应用(确保imagePullPolicy为Never或IfNotPresent)
kubectl apply -f kube-pod-usm.yaml

步骤3:验证Pod状态

执行以下命令确认Pod是否正常运行:

kubectl get pods

正常状态应为Running。

补充说明

  • 若后续更新了本地usm镜像,需重新执行minikube image load usm同步到Minikube节点,否则Kubernetes会继续使用旧镜像。
  • imagePullPolicy设为IfNotPresent也是可行方案:优先使用节点本地已有的镜像,不存在时再尝试拉取,适合需要偶尔更新镜像的场景。

内容的提问来源于stack exchange,提问作者sheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:30:48