Microk8s启用registry后无法拉取本地Docker镜像问题求助
Microk8s拉取本地Registry镜像失败问题排查与解决
问题根因
- 创建Deployment时指定的镜像名称不完整:执行
microk8s kubectl create deployment argus --image=argus时仅填写了镜像名argus,K8s会默认补全为docker.io/library/argus:latest,前往公共镜像仓库拉取不存在的镜像,必然拉取失败。 - containerd配置修改后未生效:虽然已经在
containerd-template.toml中配置了本地registry的HTTP端点,但未重启Microk8s服务加载配置,containerd仍默认用HTTPS请求本地32000端口的registry,导致协议不匹配报错。 - 安装Docker时使用的
--nobest参数仅用于适配兼容版本安装,和当前问题无关联。
解决步骤
- 重启Microk8s加载配置
执行以下命令重启Microk8s,让修改后的containerd配置生效:
microk8s stop microk8s start
- 验证本地registry连通性
重启完成后执行手动拉取命令,确认可以正常拉取镜像:
microk8s ctr image pull localhost:32000/argus:registry
- 重新创建Deployment
指定完整的本地registry镜像地址与标签创建Deployment:
# 先删除之前创建的异常Deployment microk8s kubectl delete deployment argus # 用完整镜像路径创建 microk8s kubectl create deployment argus --image=localhost:32000/argus:registry
- 验证Pod状态
等待10-20秒后查看Pod状态,正常会进入Running状态:
microk8s kubectl get pods
如果仍出现拉取失败,可以在Deployment配置中添加imagePullPolicy: IfNotPresent配置项,避免强制拉取最新镜像。
内容的提问来源于stack exchange,提问作者Thagor
相关产品推荐
相关产品推荐

