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

GCloud私有节点拉取Docker镜像报failed to pull and unpack image错误求助

问题根因

你创建的GKE集群开启了--enable-private-nodes参数,属于私有节点集群:

  • 私有节点默认不会分配公网IP,仅具备内网通信能力,无法直接访问公网资源
  • 你的Deployment配置中使用的busybox镜像默认指向Docker Hub公网仓库,节点拉取镜像时网络请求无法到达公网Docker Hub,最终触发i/o超时报错
可选解决方案

方案1:配置Cloud NAT实现VPC公网出口(通用方案)

适合需要频繁拉取各类公网镜像的场景,配置后所有私有节点都可以通过NAT网关访问公网:

  1. 创建与集群同区域的云路由器(注意替换为你实际使用的VPC名称)
gcloud compute routers create nat-router \
  --region europe-west4 \
  --network <你的VPC名称>
  1. 在云路由器上配置NAT规则
gcloud compute routers nats create nat-config \
  --router nat-router \
  --region europe-west4 \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

配置完成后等待2-5分钟生效,即可正常拉取公网镜像。

方案2:使用GCP官方Docker Hub缓存(临时快速解决)

仅适用于Docker Hub官方公共镜像,无需配置公网出口,私有节点可直接通过GCP内网访问缓存地址:
直接修改Deployment的image字段为GCP缓存地址即可:

containers:
  - name: print-logs
    image: mirror.gcr.io/library/busybox
    command: "sleep infinity"

方案3:将镜像上传到私有镜像仓库(生产环境推荐)

适合生产环境,避免公网拉取的稳定性风险和Docker Hub限流问题:

  1. 本地拉取目标镜像并打标签(替换为你自己的GCP项目ID)
docker pull busybox:latest
docker tag busybox:latest gcr.io/<你的GCP项目ID>/busybox:latest
  1. 推送镜像到GCR(Container Registry)
docker push gcr.io/<你的GCP项目ID>/busybox:latest
  1. 修改Deployment的image字段为你自己的GCR镜像地址即可,GKE私有节点默认有权限访问同项目的GCR资源。

内容的提问来源于stack exchange,提问作者Owen Peredo Diaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 08:36:05