最高效方式是用docker history查指令层并配合专用工具定位风险点;重点盯CREATED BY中的模糊基础镜像、未锁版本安装命令、缺少清理的包管理操作,SIZE中异常大层,以及COMMENT或空层中的高危配置。

直接用 docker history 查指令层,再配合专用工具定位风险点,是最高效的方式。关键不在“看全”,而在“盯准”几处高危信号。
聚焦 history 输出里的三类危险线索
运行 docker history your-image:tag 后,重点扫以下三列:
-
CREATED BY:找模糊基础镜像(如
FROM ubuntu:latest)、未锁版本的安装命令(如RUN pip install -r requirements.txt)、缺少清理的包管理操作(如RUN apt-get update && apt-get install ...但没跟rm -rf /var/lib/apt/lists/*) -
SIZE:异常大的层(比如超 50MB)可能含调试工具(
vi、curl、netcat)、临时构建产物或未删日志 -
COMMENT 或空层:某些元数据层虽无文件变更,但若含
ENV DEBUG=1或EXPOSE 8080等配置,也属潜在风险
用 dive 交互式查看每层文件增删
安装后运行 dive your-image:tag,进入可视化界面:
- 按方向键切换图层,右侧实时显示该层新增、修改、删除的文件
- 重点关注
/etc/passwd、/root/.ssh、/app/secrets.json等路径是否意外写入 - 发现某层突然多出
/usr/bin/nc或/tmp/install.sh,就说明该层引入了非预期能力
用 docker scout 定位漏洞归属的具体层
执行 docker scout cves your-image:tag,输出中每条 CVE 都会标注:
-
Layer ID:精确到 sha256 哈希值,可对应到
docker history的某一行 -
Packages:明确指出是
openssl 1.1.1n还是libz 1.2.11引入的漏洞 - Fix Version:直接给出升级建议,例如 “Upgrade openssl to 1.1.1t”
验证关键层实际内容,不只信 metadata
history 只告诉你“哪一层”,要确认“里面有什么”,需实查:
- 启动容器并进 shell:
docker run --rm -it --entrypoint sh your-image:tag,然后运行apt list --installed | grep ssl或pip list | grep requests - 导出某层 tar 并快速筛查敏感文件:
docker save your-image:tag | tar -xO '*/layer.tar' | tar -t | grep -E "(vi|nc|wget|\.pem|id_rsa)" - 检查二进制依赖:
ldd /usr/local/bin/app,确认是否误带 glibc 二进制到 Alpine 镜像中


















