最直接有效的方式是启动临时容器进入交互式 shell,用 docker run -it --rm 镜像名 /bin/bash 查看运行时文件系统;其次可用 docker save 解压分析静态层、dive 工具可视化分层、docker inspect 获取元数据线索并结合 dockerfile 推断路径。

最直接有效的方式是启动一个临时容器并进入交互式 shell,这样能真实看到运行时的文件系统结构。
用 docker run 进入临时容器浏览
这是日常排查和验证最常用的方法,适合快速查看目录、检查配置文件或确认软件安装路径。
- 命令格式:
docker run -it --rm /bin/bash(若镜像不含 bash,可尝试/bin/sh) -
--rm确保退出后自动清理容器,不残留资源 - 进容器后直接用
ls -la /查根目录,find / -type d -maxdepth 2 2>/dev/null快速列出两级子目录 - 常见路径重点关注:
/usr/bin(可执行文件)、/etc(配置)、/var/lib(数据)、/app或/opt(应用目录)
用 docker save + 解压查看静态文件层
适用于无法运行容器(如镜像无 shell)或需分析构建产物原始结构的场景,能看到每层的增量变更。
- 导出镜像:
docker save -o image.tar - 解压:
tar -xvf image.tar,会生成多个以 layer ID 命名的文件夹和manifest.json - 查看 manifest.json 可知各层顺序及顶层对应路径;进入某个 layer 文件夹,
tar -xvf layer.tar即得该层文件 - 注意:overlay2 存储驱动下,实际层内容也存在
/var/lib/docker/overlay2/<id>/diff</id>,但需 root 权限且不推荐直接操作
用 dive 工具可视化分层分析
对多层镜像尤其有用,能清晰看到每层新增、修改或删除了哪些文件,帮助优化镜像大小和安全审计。
- 安装:
curl -sS https://raw.githubusercontent.com/wagoodman/dive/master/scripts/install.sh | sh - 运行:
dive,启动后用方向键浏览各层,右侧显示该层具体文件变动 - 支持搜索文件名、统计各层体积占比、高亮敏感路径(如
/etc/shadow) - 比纯命令行更直观,特别适合 CI/CD 流程中做镜像合规性检查
用 docker inspect 获取元数据线索
虽然不能直接列出所有文件,但能快速定位关键配置和默认行为,辅助判断文件可能存放位置。
-
docker inspect输出中重点看:Config.WorkingDir(默认工作目录)、Config.Env(环境变量含路径)、Config.Cmd和Config.Entrypoint(启动逻辑常暗示主程序位置) -
GraphDriver.Data.MergedDir字段只在容器 inspect 中出现,镜像 inspect 不含此字段;镜像 inspect 的RootFS.Layers列出所有层 ID,对应 save 解压后的目录名 - 结合 Dockerfile 推断:如果知道构建来源,
RUN mkdir /data && touch /data/init.log这类指令就明确指向了文件存在位置











