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

谷歌Kubernetes节点v1.21.4-gke.2300无法查看Docker镜像问题咨询

问题根因
  • GKE 从 v1.21 及以上版本默认将容器运行时从 Docker 替换为 containerd,Kubernetes 官方正式移除了 dockershim 组件,新版本节点不再默认运行 Docker daemon
  • 旧版本中你使用的 docker images 等命令依赖 Docker daemon 的存储路径 /var/lib/docker/,新版本的所有镜像都存储在 containerd 的专属路径 /var/lib/containerd/ 下,Docker 命令无法读取该路径的镜像数据,所以会出现节点上查不到镜像的情况

你当前使用的命令:

kubectl get pods -n geo-test -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' |  sort |  uniq -c

是从 Kubernetes API 读取 Pod 配置中声明的镜像地址,并非读取节点本地实际存储的镜像数据。

新版本节点查看本地镜像的方法

登录对应 GKE 节点后,使用 containerd 官方配套的 CLI 工具 crictl 即可查看节点本地真实存储的镜像,命令如下:

sudo crictl images

镜像实际存储的根目录为 /var/lib/containerd/io.containerd.content.v1.content/,该目录下是按内容哈希拆分存储的镜像层,不建议直接手动修改。

新版本实现本地修改镜像免上传直接使用的方案

你可以按照以下步骤完成和旧版本一致的操作,无需将镜像上传到 GCR 再拉取:

  1. 登录 Pod 所在的 GKE 节点,先拉取需要修改的基础镜像:
sudo crictl pull <基础镜像地址>
  1. 安装 containerd 生态的镜像构建工具 nerdctl(语法和 Docker 命令完全兼容,是 containerd 官方推荐的 Docker 替代工具),也可以直接使用 ctr 命令完成镜像打包操作
  2. 基于基础镜像修改完成后构建新镜像,给新镜像打上和你工作负载(Deployment/StatefulSet 等)配置中完全一致的镜像名称和标签
  3. 修改对应工作负载的镜像拉取策略为 IfNotPresent 或 Never,避免 Kubernetes 强制去远程仓库拉取镜像覆盖本地自定义镜像:
imagePullPolicy: IfNotPresent
  1. 重启对应 Pod 即可直接使用本地构建的自定义镜像

旧版本 v1.19.13-gke.1200 节点 Docker 镜像查询效果:
v1.19.13-gke.1200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:03