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

Apple硅Mac用Docker-Compose构建镜像致老K8s集群拉取失败求助

问题解决:旧版Kubernetes拉取镜像报"OCI index found"错误

问题核心

旧版Kubernetes(v1.23.14)配套的containerd/runc版本不支持OCI索引(即多架构镜像的manifest list),而当前你构建推送的镜像默认生成的是OCI索引格式,而非单一amd64架构的独立镜像manifest,导致集群拉取失败。

解决方案

1. 构建阶段确保生成单一amd64架构镜像

修改docker-compose.yml,明确指定构建平台为linux/amd64,并确保推送的是单一架构manifest而非manifest list:

services:
  your-service-name:
    build:
      context: ./path-to-build-context
      platform: linux/amd64  # 强制构建amd64架构镜像

构建并推送时,执行以下命令确保只推送单一架构镜像:

# 构建镜像
docker-compose build --platform linux/amd64

# 推送镜像
docker-compose push

如果推送后仍生成manifest list,可手动推送单一架构镜像:

# 查看本地镜像的amd64 digest
docker inspect your-image:your-tag | grep -oP 'Digest": "\K[^"]+'

# 推送单一架构manifest到仓库
docker manifest push --purge your-image:your-tag@<获取到的amd64-digest>

2. 修复已推送到私有仓库的镜像

如果私有仓库中已经存在OCI索引格式的镜像,可替换为单一amd64架构的manifest:

  1. 拉取镜像到本地:
    docker pull your-image:your-tag
    
  2. 查看该镜像对应的amd64架构manifest digest:
    docker manifest inspect your-image:your-tag | jq '.manifests[] | select(.platform.architecture == "amd64") | .digest'
    
  3. 将私有仓库中的镜像标签指向该单一架构digest:
    docker manifest push --purge your-image:your-tag@<amd64-digest>
    

3. 临时调整Docker Desktop构建配置(可选)

若Docker Desktop默认使用buildx生成多架构镜像,可临时禁用BuildKit强制使用传统构建方式:

DOCKER_BUILDKIT=0 docker-compose build --platform linux/amd64
DOCKER_BUILDKIT=0 docker-compose push

验证

推送完成后,用以下命令检查镜像manifest类型,确保不是OCI索引:

docker manifest inspect your-image:your-tag

若输出中没有"manifests"数组,说明是单一架构的独立镜像,可被旧版Kubernetes正常拉取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:55:17