在Minikube中使用私有(不安全)Docker仓库遇镜像拉取失败问题
问题分析与解决步骤
你的核心问题是:本地Docker的不安全仓库配置只作用于你自己的机器,但Kubernetes集群的工作节点并没有配置这个私有仓库为不安全源,导致节点上的容器运行时(Docker/containerd)拒绝从无HTTPS证书的仓库拉取镜像。仓库没有日志也验证了这一点——节点根本没发起拉取请求。
以下是具体解决步骤:
1. 为所有K8s节点配置不安全镜像仓库
Pod是在K8s工作节点上运行的,拉取镜像的是节点上的容器运行时(Docker或containerd),不是你本地的Docker,所以必须在每个节点上单独配置:
如果节点用的是Docker:
- 在每个节点上编辑
/etc/docker/daemon.json,添加你的私有仓库地址:{ "insecure-registries" : [ "192.168.50.60:5000" ] } - 重启Docker和kubelet服务:
sudo systemctl restart docker sudo systemctl restart kubelet
如果节点用的是containerd:
- 编辑
/etc/containerd/config.toml,找到[plugins."io.containerd.grpc.v1.cri".registry]段,添加私有仓库的不安全配置:[plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.50.60:5000"] endpoint = ["http://192.168.50.60:5000"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.50.60:5000".tls] insecure_skip_verify = true - 重启containerd和kubelet服务:
sudo systemctl restart containerd sudo systemctl restart kubelet
2. 验证节点与私有仓库的连通性
在每个K8s节点上执行以下命令,确认节点能正常访问私有仓库:
curl http://192.168.50.60:5000/v2/_catalog
如果返回类似{"repositories":["dmlocal"]}的结果,说明网络连通正常;如果报错,检查节点的防火墙、路由或者仓库的网络配置。
3. 确认镜像替换是否生效
验证Kustomize是否正确替换了镜像地址:
kubectl get deployment dmlocal-app -o yaml | grep -A2 image:
确保输出的镜像地址是192.168.50.60:5000/dmlocal:0.0.1。
4. 获取Pod拉取镜像的具体错误
执行以下命令查看Pod的详细事件,获取更精准的错误信息:
kubectl describe pod dmlocal-app-56ccf9ff45-mbw6x
在Events段里会显示拉取镜像的具体失败原因,比如x509: certificate signed by unknown authority(说明没配置不安全仓库)或者connection refused(网络不通),根据错误进一步排查。
内容的提问来源于stack exchange,提问作者Raymond
相关产品推荐
相关产品推荐

