You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MicroK8s创建Deployment时无法识别本地Docker镜像求助

解决MicroK8s无法识别本地Docker镜像的问题

这个问题我之前帮不少开发者排查过,核心原因其实很明确:MicroK8s默认使用containerd作为容器运行时,而非你本地的Docker daemon,两者的镜像存储是完全隔离的,所以你拉到Docker里的镜像自然不会被MicroK8s识别到。下面给你几个实用的解决方案,按优先级排序:

方案1:将Docker镜像导入到MicroK8s的containerd中

这是最直接也最推荐的方法,步骤清晰易操作:

  • 先把本地Docker里的目标镜像导出为tar包:
    docker save -o my-image.tar my-image:your-tag
    
  • 接着用MicroK8s的命令把这个tar包导入到它的containerd存储池:
    microk8s ctr image import my-image.tar
    
  • 导入完成后,你可以用这条命令确认镜像已经成功导入:
    microk8s ctr image list | grep my-image
    

之后重启或重新创建你的Deployment,MicroK8s就能正常识别到这个本地镜像了。

方案2:配置MicroK8s使用Docker作为运行时

如果你更习惯用Docker管理镜像,可以让MicroK8s直接对接Docker的运行时,步骤如下:

  • 编辑MicroK8s的配置文件:
    microk8s config edit
    
  • 在打开的配置文件中,找到runtime-socket相关配置,把默认的/var/snap/microk8s/common/run/containerd.sock替换为/var/run/docker.sock
  • 保存配置后,重启MicroK8s服务生效:
    microk8s stop && microk8s start
    

这样MicroK8s就会直接读取Docker本地的镜像库,但要注意这种方式可能存在少量版本兼容性问题,建议先在测试环境验证。

方案3:直接用MicroK8s构建镜像

如果这个镜像是你自己开发构建的,完全可以跳过Docker,直接用MicroK8s的内置命令生成镜像,镜像会直接存储在containerd中:

microk8s build -t my-image:your-tag .

这个命令的用法和docker build几乎一致,省去了镜像导出导入的步骤。

最后再检查两个关键细节

  • 确认Deployment YAML中的镜像名称(包括tag)和导入/构建的镜像完全一致,别出现拼写错误
  • 再次核对imagePullPolicy确实设置为IfNotPresent,注意这个参数是大小写敏感的

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

火山引擎 最新活动