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

非minikube环境的Kubernetes部署如何使用本地Docker镜像

问题根因

你遇到的镜像识别异常核心原因是kubeadm部署的Kubernetes集群默认使用containerd作为容器运行时,与Docker daemon的镜像存储完全隔离:

  • 你执行docker系列命令操作的是Docker服务独立维护的镜像库,Kubernetes无法访问该存储路径下的镜像,所以就算你加载了镜像到Docker中、指定了镜像拉取策略,集群仍然会尝试从公网拉取镜像
  • Kubernetes自行拉取的镜像存储在containerd的k8s.io命名空间下,自然无法通过docker images命令查询到
无需私有镜像仓库的本地镜像使用方案

方案1:直接将镜像导入Kubernetes使用的containerd镜像库(最推荐)

这是改动最小的实现方式:

  • 如果你已经提前导出了镜像tar包,执行以下命令将镜像导入containerd的K8s专用命名空间:
    ctr -n k8s.io images import 你的镜像压缩包名.tar
    
  • 导入完成后执行以下命令确认镜像存在:
    ctr -n k8s.io images ls | grep app:test
    
  • 后续创建Pod/Deployment时指定imagePullPolicy: IfNotPresent或者imagePullPolicy: Never,即可正常调用本地镜像启动容器

方案2:切换Kubernetes容器运行时为Docker(适合习惯使用Docker命令的场景)

如果希望Docker加载的镜像能直接被Kubernetes识别,可以切换集群的容器运行时为Docker:

  • 安装cri-dockerd适配组件
  • 修改kubelet启动配置,将容器运行时端点指定为unix:///var/run/cri-dockerd.sock
  • 重启kubelet、containerd服务后,Docker与Kubernetes将共用镜像存储,你之前加载到Docker中的app:test镜像可以直接被集群调用

额外注意事项

  • 不要给本地镜像使用latest标签,Kubernetes默认对latest标签的镜像执行强制拉取策略,就算手动指定拉取规则也可能触发公网拉取逻辑,建议给本地镜像打带具体版本的标签如app:v1
  • 确认Pod配置中的镜像名称、标签与你导入的镜像完全一致,大小写、标签错误也会触发集群拉取未知镜像的行为

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:07