Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dive — 一个用于探索 Docker 镜像中每一层的工具。 | Kitploit
工具/GitHubGitHub/wagoodman/dive
通用工具容器安全
GitHubwagoodman/dive

dive

一个用于探索 Docker 镜像中每一层的工具。

查看仓库
54.4k2.0k10914天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

dive

GitHub release Validations Go Report Card License: MIT Donate

一款用于探索 Docker 镜像、层内容,并发现缩小 Docker/OCI 镜像体积方法的工具。

Image

要分析 Docker 镜像,只需使用镜像标签/ID/摘要运行 dive:

dive <your-image-tag>

或者你可以直接使用 Docker:

alias dive="docker run -ti --rm  -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive <your-image-tag>

# for example
dive nginx:latest

或者,如果您想构建自己的镜像,然后直接进入分析:

dive build -t <some-tag> .

在 macOS 上构建(仅支持 Docker 容器引擎):

docker run --rm -it \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v  "$(pwd)":"$(pwd)" \
      -w "$(pwd)" \
      -v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \
      docker.io/wagoodman/dive:latest build -t <some-tag> .

此外,你还可以在 CI 流水线中运行此命令,以确保将浪费的空间保持在最低限度(此操作会跳过 UI):

CI=true dive <your-image>

Image

这是 beta 质量! 如果你想添加新功能或发现 bug,欢迎提交 issue :)

基本功能

按层显示 Docker 镜像内容

当你在左侧选择一个层时,右侧会显示该层与之前所有层合并后的内容。此外,你可以使用方向键完整浏览文件树。

指示每一层中的变更

已更改、被修改、新增或删除的文件会在文件树中指示出来。可以调整为显示特定层的变更,或显示截至该层的累计变更。

估算“镜像效率”

左下方面板显示基本的层信息,以及一个实验性指标,用于推测镜像中包含多少浪费的空间。这可能来自跨层复制文件、跨层移动文件或未完全删除文件。该指标同时提供百分比“得分”和浪费的文件空间总量。

快速的构建/分析循环

你可以用一条命令构建 Docker 镜像并立即进行分析: dive build -t some-tag .

你只需将 docker build 命令替换为相同的 dive build 命令即可。

CI 集成

分析镜像,并根据镜像效率和浪费空间获得通过/失败结果。只需在调用任何有效的 dive 命令时在环境中设置 CI=true。

支持多种镜像来源和容器引擎

通过 --source 选项,你可以选择从何处获取容器镜像:

dive <your-image> --source <source>

或以 <source>:// 方案为图像添加前缀:

dive <source>://<your-image>

基于文件的源也采用其他 anchore 工具使用的 <source>:<path> 形式(例如 dive oci-dir:./layout)。 对于其他所有源,单个冒号会被解析为镜像名称和标签,因此 dive docker:dind 会分析 docker:dind 镜像。

源从何处读取镜像
dockerDocker 引擎(默认)。本地缺失的镜像会通过 docker API 拉取,凭据来自你的 docker 配置。会遵循 DOCKER_HOST、DOCKER_CONTEXT 以及当前 docker 上下文
podmanPodman。在 linux 上直接读取本地存储(无需 socket,参见 containers-storage,像 myapp 这样的短名称也能找到 podman 的 localhost/myapp),否则回退到 podman socket。在 macOS 上使用运行中的 podman 机器的 API socket(通过 podman machine inspect 找到);CONTAINER_HOST=unix://... 可覆盖它,ssh 连接会被拒绝
docker-archive磁盘上的 docker save tarball,或 OCI 归档(docker-tar 是别名)
oci-archive磁盘上的 OCI 镜像布局 tarball
oci-dir磁盘上的 OCI 镜像布局目录
registry一个 registry,无需容器引擎(凭据来自你的 docker 配置)。私有 IP 地址上的 registry 会被拒绝,因为它们会通过明文 http 访问
containerdcontainerd 守护进程(CONTAINERD_NAMESPACE 选择命名空间)
containers-storage本地 podman/buildah 存储(仅限 linux,见下文)
auto自动检测:先检测磁盘上的文件,然后依次是 docker、podman、containerd 和 containers-storage,最后从 registry 拉取。会报告它选中的源,因为本地引擎都没有的镜像会静默地从 registry 获取(短名称则来自 Docker Hub)。仅对 --source 有效,不能作为 scheme 使用

对于多平台镜像,--platform 选择要分析的变体(例如 --platform linux/arm64)。docker save tarball 只包含单个平台,当不匹配时 dive 会报告。

containers-storage 支持仅在带有 containers_image_openpgp 构建标签时才会编译进来,linux 发布构建(以及 docker 镜像)具备该标签。没有它时,该源会报告其不可用。要自行构建: go build -tags containers_image_openpgp,exclude_graphdriver_btrfs ./cmd/dive。

JSON 导出

--json <path> 会跳过 UI 并将分析写入文件。每个层的 id 是该层的 diff ID(与 digestId 相同的值)。

安装

Ubuntu/Debian

使用 deb 包:

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb"
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

使用 snap:

sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon

[!CAUTION] 如果你通过 apt-get 安装了 Docker,则不推荐使用 Snap 方式,因为它可能会破坏你现有的 Docker 守护进程。

另请参阅:https://github.com/wagoodman/dive/issues/546

RHEL/Centos

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -fOL "https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm"
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm

Arch Linux

可在 extra 仓库 中获取,并可通过 pacman 安装:

pacman -S dive

Mac

如果你使用 Homebrew:

brew install dive

如果你使用 MacPorts:

sudo port install dive

或者从发布页面下载最新的 Darwin 构建版本。

Windows

如果你使用 Chocolatey

choco install dive

如果你使用 scoop

scoop install main/dive

如果你使用 winget:

winget install --id wagoodman.dive

或从发布页面下载最新的 Windows 版本。

Go 工具 需要 Go 1.26 或更高版本(在 Linux 上添加 -tags containers_image_openpgp,exclude_graphdriver_btrfs 以支持 containers-storage)。

go install github.com/wagoodman/dive@latest

注意:以这种方式安装时,运行 dive -v 将不会显示正确的版本。

Nix/NixOS

在 NixOS 上:

nix-env -iA nixos.dive

在非 NixOS 系统上(Linux、Mac)

nix-env -iA nixpkgs.dive

X-CMD

x-cmd 是一个 Posix Shell 工具箱,提供使用 shell 和 awk 构建的轻量级包管理器。

x env use dive

Docker

docker pull docker.io/wagoodman/dive
# or alternatively
docker pull ghcr.io/wagoodman/dive

运行时需要包含 Docker socket 文件:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    docker.io/wagoodman/dive:latest <dive arguments...>

适用于 Windows 的 Docker(显示的是 PowerShell 兼容的换行符;为兼容命令提示符,请折叠为单行)

docker run --rm -it `
    -v /var/run/docker.sock:/var/run/docker.sock `
    docker.io/wagoodman/dive:latest <dive arguments...>

注意: 根据你本地运行的 Docker 版本,你可能需要将 Docker API 版本指定为环境变量:

   DOCKER_API_VERSION=1.37 dive ...

或者,如果你使用 docker 镜像运行:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e DOCKER_API_VERSION=1.37 \
    docker.io/wagoodman/dive:latest <dive arguments...>

如果你使用的是替代运行时(如 Colima 等),则可能需要将 docker host 指定为环境变量,以便拉取本地镜像:

   export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')

CI 集成

当使用环境变量 CI=true 运行 dive 时,dive 的 UI 将被绕过,转而分析你的 docker 镜像,并通过返回码给出通过/失败指示。目前支持通过 .dive-ci 文件配置三项指标,你可以将该文件放在仓库根目录下:

rules:
  # If the efficiency is measured below X%, mark as failed.
  # Expressed as a ratio between 0-1.
  lowestEfficiency: 0.95

  # If the amount of wasted space is at least X or larger than X, mark as failed.
  # Expressed in B, KB, MB, and GB.
  highestWastedBytes: 20MB

  # If the amount of wasted space makes up for X% or more of the image, mark as failed.
  # Note: the base image layer is NOT included in the total image size.
  # Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
  highestUserWastedPercent: 0.20

你可以使用 --ci-config 选项覆盖 CI 配置路径。

快捷键

下载工具