如何获取OCI镜像中的完整文件?容器无法启动无法使用docker export
获取OCI镜像完整文件结构(容器无法启动时)
当容器无法启动、无法使用docker export时,你可以通过以下几种方法获取镜像合并分层后的完整文件结构:
方法1:使用skopeo + umoci工具
这是处理OCI镜像的标准工具链,无需依赖Docker daemon的完整功能:
- 拉取镜像到本地OCI格式存储:
skopeo copy docker://ghcr.io/foo/ccm-foo-staging oci:local-oci-image:latest - 解压镜像到本地文件系统:
umoci unpack --image local-oci-image:latest unpacked-rootfs - 查看完整文件结构:
ls -R unpacked-rootfs/rootfs
方法2:利用Docker的create+export命令
即使容器无法启动,也可以创建容器实例后导出其文件系统:
- 从镜像创建未启动的容器:
docker create --name temp-container ghcr.io/foo/ccm-foo-staging - 导出容器的完整文件系统并查看:
docker export temp-container | tar -t - 完成后清理临时容器:
docker rm temp-container
方法3:手动合并分层tar包
如果没有额外工具,可以手动处理docker save的结果:
- 解压镜像包到本地目录:
mkdir temp-image && docker save ghcr.io/foo/ccm-foo-staging | tar -C temp-image -x - 通过
manifest.json确认分层顺序(后面的层会覆盖前面的文件):cat temp-image/manifest.json | jq '.[0].Layers' - 按顺序合并所有分层到同一目录:
mkdir merged-rootfs for layer_path in $(jq -r '.[0].Layers[]' temp-image/manifest.json); do tar -C merged-rootfs -xf temp-image/"$layer_path" done - 查看合并后的文件结构:
ls -R merged-rootfs
内容的提问来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

