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

使用k3d本地私有仓库拉取Docker镜像失败求助

k3d私有仓库镜像拉取失败排查方案

问题根源

Pod 内部的 localhost 指向容器自身,而非 k3d registry 容器;同时镜像引用地址与集群内部 registry 访问地址不匹配,导致 kubelet 无法建立连接。

修复操作步骤

1. 修正镜像标签与推送地址

宿主机推送镜像时,需使用集群内部可识别的 registry 域名:

# 重新打标签
docker tag nginx:latest k3d-registry.localhost:8087/nginx:latest
# 重新推送镜像
docker push k3d-registry.localhost:8087/nginx:latest

2. 更新 Pod 配置的镜像地址

将你的 Deployment/Pod YAML 中的镜像地址改为 k3d-registry.localhost:8087/nginx:latest,替换原来的 localhost:8087/nginx:latest。

3. 验证集群内部 registry 连通性

进入集群节点容器测试网络:

# 列出集群节点
k3d node list
# 进入节点容器(替换为实际节点名,如k3d-dev-server-0)
docker exec -it k3d-dev-server-0 sh
# 测试registry可达性
curl http://k3d-registry.localhost:8087/v2/

返回空JSON {} 即为连通正常。

4. 调整 registry.yaml 配置

确保镜像加速配置的镜像名与内部地址一致:

mirrors:
  'k3d-registry.localhost:8087':
    endpoint:
      - http://k3d-registry.localhost:8087

此配置让 containerd 在拉取该域名镜像时直接访问内部地址。

5. 重建集群(若上述操作无效)

删除现有集群后重新创建:

k3d cluster delete dev
k3d cluster create dev -p "8000:80@loadbalancer" --registry-use k3d-registry.localhost:8087 --registry-config registry.yaml

关键说明

k3d 创建的 registry 容器在集群内部的域名是 k3d-registry.localhost,宿主机通过端口映射可用 localhost:8087 访问,但集群内的 Pod/节点必须使用内部域名才能正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:25:32