可通过 docker history 命令查看镜像各层的指令、时间戳、大小和创建者,定位可疑包、不安全基础镜像或高危配置;重点关注 CREATED BY、SIZE、CREATED 列,并结合 Trivy、Dive 等工具自动化分析。

可以通过 Docker 镜像的构建历史(history) 查看每一层的指令、时间戳、大小和创建者,从而定位引入可疑软件包、不安全基础镜像或高危配置的具体步骤。
查看镜像构建历史
使用 docker history <image> 命令,例如:
输出中重点关注以下列:
-
CREATED BY:显示该层对应的 Dockerfile 指令(如
RUN apt-get install -y curl),这是追溯问题来源的核心线索 - SIZE:异常大的层可能包含未清理的缓存、调试工具或多余依赖
- CREATED:结合时间可判断是否拉取了过期/已知漏洞的包(需配合 CVE 数据库交叉验证)
识别常见风险点
在 history 输出中留意这些典型信号:
- 使用
FROM ubuntu:latest或debian:stable等模糊标签——无法确定具体版本,易引入未知漏洞 -
RUN pip install --no-cache-dir -r requirements.txt但 requirements.txt 未锁定版本——可能导致运行时拉取含漏洞的第三方包 -
RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/*缺少最后的清理步骤——残留包索引可能暴露系统信息 - 存在
COPY . /app后紧跟RUN chmod 777或启用调试服务(如ENV DEBUG=1)——属于配置型风险
结合镜像内容深入验证
history 只能定位“哪一层”,还需进入对应层检查实际内容:
- 用
docker run --rm -it <image>@<layer-digest> sh(需先用docker image inspect获取 layer digest) - 或更常用:启动镜像后执行
apt list --installed、pip list、ls -la /etc/passwd等命令,确认是否存在非预期二进制、用户或权限设置 - 对关键层导出为 tar:
docker save <image> | tar -xO '*/layer.tar' | tar -t | grep -E "(curl|wget|netcat|vi)",快速筛查敏感工具
自动化辅助分析
人工翻 history 效率低,推荐搭配工具提升追溯能力:
-
Trivy:运行
trivy image --security-checks vuln,config --format table <image>,直接标出哪一层引入了 CVE 和不安全配置 - Dive:交互式查看各层文件变化,高亮新增/删除文件,便于发现意外写入(如临时密钥、日志文件)
-
docker scout(Docker 官方):
docker scout cves <image>显示漏洞归属的 layer ID 和建议修复的指令行

















