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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:17:23