Docker镜像导出后需按目标运行时调整格式:Podman 5.0用oci-archive,旧Docker用docker-archive,K8s离线部署需oci-layout,嵌入式环境要tar.gz+rootfs+config.json+manifest.json;推荐用docker save + skopeo转换,并注意rootless适配与containerd压缩要求。

导出 Docker 镜像后转换格式,核心是按目标运行时要求调整归档结构和元数据,不是简单重打包。
确认目标运行时支持的镜像格式
不同容器运行时对镜像封装格式有硬性要求:
- Podman 5.0 默认使用 OCI 标准归档(oci-archive),而老版 Docker 常用 docker-archive;若直接导入会报“unsupported manifest type”
- Kubernetes 集群通常依赖 registry 拉取,但离线部署时需转为
oci-layout目录结构供ctr images import使用 - 某些嵌入式或边缘运行时(如 containerd + runc)只接受 tar.gz 打包的 rootfs 层+config.json+manifest.json 组合
用 docker save + skopeo 完成格式转换
这是最稳定、跨平台兼容的做法,无需启动构建环境:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 先导出为标准 docker-archive:
docker save -o app.tar myapp:1.2.0 - 用 skopeo 转为目标格式:
skopeo copy docker-archive:app.tar oci-archive:app-oci:latest - 验证结果:
skopeo inspect oci-archive:app-oci:latest | jq '.Manifests[0].platform'查看架构是否保留
适配 Podman 的 rootless 场景
当目标环境是无 root 权限的 Podman 时,还需注意两点:
- 导出前确保镜像不含特权指令(如
USER root或cap-add),否则导入后无法启动 - 若原镜像用了 buildkit 特性(如
RUN --mount=type=cache),需在 skopeo 转换后手动检查 config.json 中的history字段是否为空——空 history 可能导致 Podman 解析失败 - 推荐加参数强制标准化:
skopeo copy --dest-compress --dest-oci-accept-uncompressed-layers docker-archive:app.tar oci-archive:app-oci:latest
离线环境直转 containerd 可用格式
在没有 registry 的纯内网或边缘节点,可一步生成 containerd 原生支持的 layout:
skopeo copy docker-archive:app.tar dir:/tmp/app-oci-layout- 该目录下自动生成
blobs/、oci-layout和index.json,直接用于:ctr images import /tmp/app-oci-layout - 注意:containerd 要求 blobs 中的 layer 必须是 gzip 压缩(非 zstd),skopeo 默认满足;若源镜像是 zstd 压缩,需加
--dest-compress-format=gzip

















