Minikube 中如何使用本地的 Docker 镜像?
三种方式让 Minikube 用上本地镜像:minikube image load 载入、eval $(minikube docker-env) 直接用其守护进程构建、minikube image build。同时把 imagePullPolicy 设为 IfNotPresent/Never 防止去仓库拉取。
最快方式:minikube image load my-image 把宿主机本地镜像直接注入 Minikube。注意还要把 Deployment 的 imagePullPolicy 设为 IfNotPresent(或 Never)——否则 K8s 仍会尝试去远端仓库拉取,本地镜像用不上。
方式一:minikube image load(直给)
# 宿主机正常构建
docker build -t my-image .
# 注入 Minikube
minikube image load my-image
# 确认
minikube image ls | grep my-image
方式二:共用 Minikube 的 Docker 守护进程
把当前终端的 docker 客户端指向 Minikube 内部的 Docker:
eval $(minikube docker-env)
docker build -t my-image . # 直接构建进 Minikube
docker images # 看到的是 Minikube 里的镜像
# 用完切回宿主机
eval $(minikube docker-env -u)
构建产物天然在 Minikube 里,省了 load 一步;注意别在这个终端误操作生产镜像。
方式三:minikube image build
minikube image build -t my-image .
不走宿主机 Docker,由 Minikube 直接构建。
Deployment 里的关键配置
spec:
containers:
- name: app
image: my-image # 不带仓库前缀、别用 latest
imagePullPolicy: IfNotPresent # 或 Never
两个细节:
- 镜像名带
:latest时 K8s 默认策略是Always(总是去拉),本地镜像就被无视了——显式写IfNotPresent或换具体标签 - 镜像名不要带仓库域名前缀,避免被解析成远端仓库
观测云对照
本地集群同样可观测。 Minikube 里也能部署 DataKit(DaemonSet),联调阶段就把日志、指标、链路打通,"上测试环境才发现采不到"的问题提前暴露。
常见问题(FAQ)
Q:Pod 报 ErrImagePull / ImagePullBackOff?
A:imagePullPolicy 是 Always 或镜像名带仓库前缀;改成 IfNotPresent 并确认 minikube image ls 里有该镜像。
Q:load 进去改了代码要重来吗?
A:要。重新 build(注意换标签或强制覆盖)再 minikube image load,然后重启 Pod。
Q:多节点 Minikube 怎么办?
A:minikube image load 会处理到各节点;大集群本地开发可以考虑 minikube addons enable registry 跑集群内仓库。