使用本地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
操作及错误记录
- 初始创建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
- 设置
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
相关产品推荐
相关产品推荐

