最务实的做法是分层覆盖:镜像层用trivy或docker scout扫描漏洞,容器层用docker bench security检查配置,运行时结合harborguard等平台实现自动化闭环管理。

直接用成熟工具扫描镜像、检查运行时配置、集成进构建流程,是当前最务实的做法。不依赖单一方案,而是分层覆盖:镜像层查漏洞、容器层查配置、运行时查行为。
选对工具,按需组合
不同工具解决不同问题,没必要强求“一个工具打天下”:
-
Trivy:轻量快速,适合CI/CD阶段做镜像静态扫描,支持OS包和语言级依赖(如npm、pip),命令简单:
trivy image --severity HIGH,CRITICAL nginx:1.25 - Docker Scout:Docker官方集成,推送镜像到Docker Hub或私有registry后自动触发扫描,支持忽略规则和策略门禁,适合团队统一策略管控
-
Docker Bench Security:检查宿主机和容器运行时配置是否符合CIS基准,比如是否禁用特权模式、是否挂载敏感路径,命令:
docker run --net host --pid host --userns host --cap-add audit_control -v /etc:/etc:ro -v /var/lib:/var/lib:ro -v /var/run/docker.sock:/var/run/docker.sock:ro docker/docker-bench-security - HarborGuard:企业级平台型方案,内置Trivy、Grype、Dockle等六种引擎,提供Web界面、SBOM生成和历史对比,适合需要集中管理与审计的场景
把扫描嵌入构建和部署流程
扫描不能只靠手动执行,必须自动化才真正起效:
- 在CI流水线中增加镜像扫描步骤,发现HIGH及以上漏洞时中断构建,避免带病镜像进入仓库
- 用
docker buildx bake或docker compose build配合--load和后续扫描命令,实现构建即检 - 在GitLab CI或GitHub Actions中调用
trivy或docker scout插件,扫描结果可作为job输出存档,也可触发告警 - 对于私有registry(如Harbor),启用内置扫描器并配置定时全量扫描,结合webhook通知新漏洞
关注关键配置项,不止看CVE
漏洞编号只是表象,很多风险来自错误配置:
- 检查Dockerfile是否用了
USER指令切换非root用户,避免容器内进程拥有过高权限 - 确认运行时是否加了
--read-only、--cap-drop=ALL、--security-opt=no-new-privileges等加固参数 - 验证健康检查(
HEALTHCHECK)是否真实有效,而非仅返回HTTP 200 - 排查是否意外暴露了
/var/run/docker.sock或挂载了宿主机敏感路径(如/etc、/root)
结果要能驱动修复,不能只堆报告
扫描出问题只是开始,闭环管理才是重点:
- 优先处理Critical和High级别漏洞,明确修复路径——升级基础镜像、替换依赖包、打补丁
- 对暂时无法修复的漏洞,用Docker Scout的
.snykpolicy或Trivy的--ignore-policy文件记录原因和到期时间,避免重复告警 - 将扫描结果结构化输出(JSON格式),接入Grafana或内部安全看板,跟踪漏洞趋势和修复率
- 定期清理无用镜像和悬空层,减少攻击面;禁用
latest标签,强制使用语义化版本提升可追溯性











