Docker镜像完整性校验需三重验证:先核对manifest的SHA-256 digest是否匹配,再验证镜像能否正常加载运行,最后比对本地层摘要与远程manifest层列表一致性,辅以传输阶段文件哈希初筛。
拉取 Docker 镜像时做完整性校验,核心是确认你拿到的镜像和远程仓库发布的完全一致——既没被传输损坏,也没被恶意篡改。这不是单靠文件大小或一次哈希就能覆盖的事,得结合镜像层、manifest 和运行行为三重验证。
这是最权威的校验依据。Docker 最新用 SHA-256 digest 唯一标识镜像内容,与 tag 无关,且不可伪造(除非私钥泄露)。
sha256:abc123...
docker inspect --format='{{index .RepoDigests 0}}' nginx:latest,输出应为 nginx@sha256:xxx
docker pull nginx@sha256:xxx 强制按 digest 获取,再比对本地 ID 是否一致仅 digest 匹配还不够——有些损坏可能发生在本地缓存或 registry 返回异常响应时,导致镜像元数据错乱但 digest 仍“看起来正常”。
docker load -i myimage.tar 加载导出包,观察是否报 invalid format 或 config file not found
docker run --rm <image> <cmd>,例如 nginx:latest nginx -v,确认能输出预期版本而非崩溃或报错docker inspect <image> | jq '.Config.Cmd, .Config.Entrypoint',确保与最新说明或构建时设定一致Docker 拉取时会逐层校验每个 blob 的 digest,但这个过程默认静默。你可以主动触发并观察日志。
docker --debug pull nginx:latest,留意输出中类似 Downloaded layer sha256:xxx 的行docker image inspect nginx:latest | jq '.RootFS.Layers',得到一串 digest 列表skopeo inspect docker://docker.io/library/nginx:latest 查远程 manifest 中的 Layers 字段,两组 digest 应完全相同适用于离线分发或 air-gapped 环境,虽不能替代 digest 校验,但能快速发现传输中断或磁盘写入错误。
docker save -o app.tar app:v1 && sha256sum app.tar > app.tar.sha256
sha256sum -c app.tar.sha256,显示 OK 才继续 docker load
.tar 文件本身,不是镜像运行态