k8s 国内无法下载docker images的分析

国内不能下载image, 报错信息如下,

复制代码
[root@hz-shtop-1 ~]# docker pull hub.c.163.com/kubesphere/kindest-node:v1.35.0
Error response from daemon: failed to resolve reference "hub.c.163.com/kubesphere/kindest-node:v1.35.0": failed to do request: Head "https://hub.c.163.com/v2/kubesphere/kindest-node/manifests/v1.35.0": dial tcp 106.2.45.245:443: i/o timeout

遇到的是拉取网易云 kindest-node:v1.35.0 镜像时网络超时i/o timeout),核心原因是服务器到网易云镜像仓库的网络链路不通(可能是防火墙/代理限制、网络带宽不足,或 v1.35.0 版本在该镜像源未同步)。我会给你「降级版本+离线加载」的终极解决方案,彻底绕开网络问题。

一、核心错误分析

复制代码
dial tcp 106.2.45.245:443: i/o timeout
  • 服务器能解析 hub.c.163.com 的 IP(106.2.45.245),但无法建立 TCP 连接(443端口),属于网络层不通
  • v1.35.0 是较新版本,网易云镜像源可能未同步该版本,进一步加剧拉取失败。

二、终极解决方案:离线加载镜像(完全绕开网络)

步骤1:在能上网的机器(本地/其他服务器)下载镜像

找一台有外网的机器(比如你的本地电脑),执行以下命令下载稳定版本的 kindest-node 镜像:

bash 复制代码
# 推荐下载 v1.28.0(国内镜像源覆盖最全、最稳定)
docker pull hub.c.163.com/kubesphere/kindest-node:v1.28.0

# 将镜像保存为 tar 包(方便拷贝到目标服务器)
docker save hub.c.163.com/kubesphere/kindest-node:v1.28.0 > kind-node-v1.28.0.tar

# 可选:若需要 v1.30.0,也可下载(成功率高于 v1.35.0)
# docker pull hub.c.163.com/kubesphere/kindest-node:v1.30.0
# docker save hub.c.163.com/kubesphere/kindest-node:v1.30.0 > kind-node-v1.30.0.tar
步骤2:将 tar 包拷贝到目标服务器(hz-shtop-1)

scp 命令拷贝(替换「本地路径」和「服务器IP」):

bash 复制代码
# 本地执行:拷贝 tar 包到目标服务器的 /root 目录
scp /本地路径/kind-node-v1.28.0.tar root@hz-shtop-1:/root/
步骤3:在目标服务器加载镜像并打标签

登录 hz-shtop-1 服务器,执行以下命令:

bash 复制代码
# 1. 加载镜像到 Docker 本地仓库
docker load < /root/kind-node-v1.28.0.tar

# 2. 给镜像打标签(匹配 Kind 期望的默认名称,避免路径问题)
docker tag hub.c.163.com/kubesphere/kindest-node:v1.28.0 kindest/node:v1.28.0

# 验证镜像是否加载成功(能看到 kindest/node:v1.28.0 即为成功)
docker images | grep kindest-node
步骤4:基于本地镜像创建 Kind 集群

跳过网络拉取,直接使用本地镜像创建集群:

bash 复制代码
# 1. 删除之前失败的集群残留
kind delete cluster --name kind

# 2. 创建集群(指定本地镜像,跳过预检查)
kind create cluster \
  --image kindest/node:v1.28.0 \
  --name kind \
  --skip-preflight-checks  # 跳过镜像拉取检查,强制用本地镜像

三、验证集群创建成功

执行以下命令确认状态:

bash 复制代码
# 1. 查看 Kind 集群列表
kind get clusters
# 输出 "kind" 表示集群创建成功

# 2. 查看节点状态(Status 为 Ready 即为正常)
kubectl get nodes
# 预期输出:
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   20s   v1.28.0

四、备选方案:检查服务器网络(若能调整网络策略)

如果你的服务器允许调整网络配置,可尝试以下操作解决超时问题:

  1. 临时关闭防火墙/SELinux (测试用,生产需谨慎):

    bash 复制代码
    systemctl stop firewalld
    setenforce 0
  2. 配置 Docker 代理 (若服务器需通过代理上网):
    编辑 /etc/docker/daemon.json

    json 复制代码
    {
      "proxies": {
        "default": {
          "httpProxy": "http://你的代理IP:端口",
          "httpsProxy": "http://你的代理IP:端口",
          "noProxy": "localhost,127.0.0.1,192.168.0.0/16"
        }
      }
    }

    重启 Docker:

    bash 复制代码
    systemctl daemon-reload
    systemctl restart docker
  3. 改用更低版本 (v1.27.0/v1.26.0):
    这些版本在国内镜像源的同步率更高,拉取成功率也更高:

    bash 复制代码
    docker pull hub.c.163.com/kubesphere/kindest-node:v1.27.0

总结

  1. 核心问题:服务器到网易云镜像仓库的网络链路不通,且高版本镜像未同步;
  2. 终极方案:离线下载镜像→拷贝到服务器→加载镜像→创建集群,完全绕开网络限制;
  3. 关键版本:优先选 v1.28.0(稳定、镜像源覆盖全),避免 v1.35.0 这类高版本;
  4. 验证重点 :加载镜像后用 docker images 确认标签正确,创建集群时加 --skip-preflight-checks 跳过校验。

如果执行 kind create cluster 后仍有报错,提供完整的错误输出,我会帮你进一步定位问题。

相关推荐
小p11 小时前
docker学习: 2. 构建镜像Dockerfile
docker
小p1 天前
docker学习: 1. docker基本使用
docker
崔小汤呀1 天前
Docker部署Nacos
docker·容器
缓解AI焦虑1 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
1candobetter2 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
BugShare2 天前
继《小爱音响》详细说下怎么部署,尤其是关于Docker部分
docker·nas·xiaomusic
小马爱打代码2 天前
Docker:完全指南从入门到精通
运维·docker·容器
ITKEY_2 天前
docker 容器端口映射消失
docker·容器