#extract #docker #decompression

docker_extract

一个用于从Docker镜像中提取文件系统的库

3 个不稳定版本

0.2.1 2020年3月14日
0.2.0 2020年2月19日
0.1.0 2020年2月17日

#1022 in 文件系统

每月下载 24

MIT 许可证

9KB
121 代码行

状态

CircleCI crates.io badge docs.rs badge

docker-extract

docker-extract 是一个Rust库,可以从Docker镜像中提取文件系统。

以下是一个示例,将 alpine:latest 提取到目录 ./docker-fs

use docker_extract;
use std::path::Path;

fn main() {
    let image = "alpine";
    let tag = "latest";
    let to_dir = Path::new("./docker-fs");
    docker_extract::extract_image(image, tag, &to_dir);
}

安全

此库依赖于 tar crate,它非常注重安全问题。为了防止目录遍历问题,它不会在指定的输出目录之外解包任何内容,即,名称中包含 .. 的路径将不会被解包。

此外,docker-extract 不会提取指向绝对路径的符号链接,因为它们无论如何都会指向错误的位置。

详细提取过程

以下过程描述了 docker-extract 做了什么

  1. 运行 docker save {image}:{tag} -o {tmp_dir}/image.tar
  2. ${tmp_dir} 中的 ${tmp_dir} 提取所有层到所需的结果目录
  3. 删除 ${tmp_dir}

因此,docker-extract 需要访问 docker,并且 {image}:{tag} 已经被拉取。

crev

此crate有其作者的 crev审核

建议始终使用 cargo-crev 来验证每个依赖项的可靠性,包括此依赖项。

依赖项

~4–13MB
~176K SLoC