校验和不匹配(sha256 digest verification failed)主因是本地缓存的 manifest 或 layer 元数据与远程 registry 内容不一致,常见于多平台镜像、缓存残留、私有仓库签名策略或 Docker 19.03+ 启用 manifest list 解析后行为变化;应清空 ~/.docker/manifests/*(Linux/macOS)或 %USERPROFILE%.docker\manifests\(Windows),CI 中需加 --no-cache 或设 DOCKER_CONTENT_TRUST=1,并显式指定 --platform 避免架构错配。

校验和不匹配(sha256 digest verification failed)不是镜像被篡改,而是本地缓存的 manifest 或 layer 元数据与远程 registry 当前返回的内容对不上。常见于多平台镜像、缓存残留、私有仓库签名策略或 Docker 版本升级后解析行为变化。
清空本地 manifest 缓存
Docker 19.03+ 默认启用 manifest list 解析,容易在 multi-arch 场景下把旧的 platform 信息缓存在本地,导致拉取时校验失败。
- Linux/macOS:运行
rm -rf ~/.docker/manifests/* - Windows:删除
%USERPROFILE%\.docker\manifests\下全部内容 - 操作后无需重启 Docker,下次
docker pull会重新获取完整 manifest
避免复用脏缓存(尤其 CI 环境)
CI 流水线中 docker build --pull 可能复用本地已损坏的 layer,触发校验失败。
- 显式加
--no-cache强制跳过本地 layer 复用 - 构建前执行
docker builder prune -a清理 build cache - 若使用 BuildKit,可设环境变量
export DOCKER_BUILDKIT=1提升元数据一致性
检查私有 registry 的内容信任设置
某些私有仓库启用了 content-trust 或强制镜像签名,而客户端未开启对应校验,会导致拉取时拒绝校验通过的 layer。
- 确认服务端是否配置了
notary或cosign签名验证 - 客户端需启用:运行前设置
DOCKER_CONTENT_TRUST=1 - 或临时绕过(不推荐生产):
docker pull --disable-content-trust false xxx
确认镜像平台是否匹配并显式指定
拉取 multi-arch 镜像时,Docker 默认按宿主机架构选 layer;若 manifest 中同 tag 对应多个 platform,缓存可能混入不匹配的 digest。
- 查支持的平台:
docker buildx imagetools inspect nginx:alpine - 拉取时强制指定:
docker pull --platform linux/amd64 nginx:alpine - CI 脚本中务必带上
--platform,避免 runner 架构漂移(如 GitHub Actions ubuntu-latest 可能是 ARM64)











