docker原生不支持导出标准oci layout目录,仅支持自有tar格式;需用skopeo或oras等工具转换,如skopeo copy docker://nginx:latest oci:/path/to/nginx-oci可生成含oci-layout、index.json和blobs的合规oci目录。

Docker 本身不直接支持将镜像导出为 标准 OCI 格式目录(OCI Layout),它默认导出的是 Docker 自有的 tar 归档格式(docker save),该格式虽兼容 OCI 层结构,但不是 OCI Layout 目录结构——即没有符合 oci-layout 和 index.json 规范的文件系统布局。
要得到真正的、可被 ctr、podman 或 Kubernetes(如 containerd)直接识别的 OCI Layout,需借助兼容 OCI 的构建/转换工具,而非原生 Docker 命令。
✅ 正确做法:用 skopeo 或 oras 导出为 OCI Layout
1. 使用 skopeo copy(推荐,轻量、无守护进程)
skopeo 支持直接将镜像拉取并保存为标准 OCI Layout 目录:
skopeo copy docker://nginx:latest oci:/path/to/nginx-oci:latest
执行后,/path/to/nginx-oci/ 下会生成标准 OCI 目录结构:
-
oci-layout(标识 OCI Layout 根目录) -
index.json(镜像索引) -
blobs/(含 config、layers、manifest 等,按 digest 存储) -
refs/(可选,指向当前 tag)
✅ 这是真正符合 OCI Image Spec v1.1 的输出,可被 ctr images import、podman load 或 crictl pull --image-dir 直接使用。
2. 使用 oras(适合带 annotations 或多架构场景)
如果需要额外元数据或推送至 OCI 兼容仓库(如 GitHub Container Registry、Azure Container Registry),可用 oras:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
# 先 save 为 tar(Docker 原生方式) docker save -o nginx.tar nginx:latest # 再用 oras 将 tar 转为 OCI Layout 目录 oras push --format oci /path/to/nginx-oci:latest nginx.tar
⚠️ 注意:oras push 默认推送到远程 registry;加 --format oci 并指定本地路径时,它会解包并写入标准 OCI Layout。
❌ 不可行的方式:docker save + 手动改结构
docker save -o nginx.tar nginx:latest 输出的是 Docker-style tar(含 manifest.json + repositories + 分层 tar),它:
- mediaType 是
application/vnd.docker.distribution.manifest.v2+json - 缺少
oci-layout文件和index.json结构 - 不被
containerd的ctr images import直接接受(会报错not an OCI image layout)
即使解压后重排目录,也需手动补全 digest 计算、生成 index、修正 mediaType —— 容易出错且不可靠。
? 验证是否为合法 OCI Layout
导出后运行:
ls -R /path/to/nginx-oci/ # 应看到 oci-layout, index.json, blobs/sha256:..., etc. # 检查 index.json 是否合规 jq '.manifests[0].mediaType' /path/to/nginx-oci/index.json # 输出应为 "application/vnd.oci.image.manifest.v1+json"
补充说明:为什么 Docker 不原生支持 OCI Layout 导出?
Docker CLI 仍以自身 registry 协议和 daemon 为中心设计,其 save/load 流程面向本地引擎优化。而 OCI Layout 是为无守护进程工具链(如 buildkit、kaniko、podman、containerd)设计的通用磁盘格式。所以生产环境中跨平台迁移时,建议统一使用 skopeo 或 kaniko --oci-layout 作为出口。
不复杂但容易忽略:OCI Layout 不是“另一种 tar”,而是一种有严格目录约定和内容寻址规则的文件系统结构。选对工具,一步到位。










