docker compose 整合自动化安全审计工具的核心是将 trivy、docker bench 等轻量二进制工具封装为非 root 用户运行的独立服务,通过挂载 docker.sock、策略卷和报告卷,统一 json 输出与退出码语义,支持本地镜像、宿主机及私有 registry 的一键审计。

用 Docker Compose 整合自动化安全审计工具,核心是把扫描器封装成可复用的服务,通过挂载、网络和卷配置实现与目标镜像或宿主机的交互,同时保持命令统一、结果可解析。不依赖外部 CI 环境,本地或测试环境也能一键触发完整审计流程。
选对工具并打包为独立服务
优先选用轻量、二进制分发的审计工具,避免在 compose 服务中运行 apt/yum 或构建过程:
- Trivy:直接下载静态二进制,COPY 到 Alpine 镜像的 /usr/local/bin/,无需 glibc 依赖
- Docker Bench for Security:官方提供单文件 shell 脚本,复制进镜像即可执行
- Vuls(如需 OS 层扫描):用官方 vuls/vuls 镜像,配合 config.toml 挂载实现目标定义
- 避免在服务里跑 Python/Node 运行时——增加体积、启动慢、权限复杂
设计可挂载、可复用的 compose 服务结构
关键在于让服务能灵活对接不同审计对象(本地镜像、远程 registry、宿主机 Docker 引擎):
-
扫描本地镜像:服务挂载 /var/lib/docker(只读)或通过
docker save导出 tar 后挂载为 volume - 扫描宿主机配置:挂载 /var/run/docker.sock(只读)、/etc/docker、/proc 和 /sys
-
连接私有 registry:注入
DOCKER_CONFIG卷或设置REGISTRY_AUTH环境变量,支持 Harbor/GitLab Registry - 所有服务默认使用非 root 用户(如
user: "1001:1001"),并通过security_opt: ["no-new-privileges:true"]限制能力
预置策略与标准化输出控制
审计不是只跑工具,而是让每次执行都遵循同一套规则和格式:
- 把 compliance.rego、.trivyignore、docker-bench-cis.json 等策略文件打包进镜像 /etc/audit-policy/
- 服务启动命令统一封装为脚本(如
/entrypoint.sh audit-image nginx:alpine),自动加载对应策略 - 强制所有输出为 JSON 格式(
--format json),错误走 stderr,退出码区分:0=全通过,1=策略失败,2=连接异常 - 结果写入挂载卷(如
./reports:/report),便于后续归档或告警脚本读取
示例 docker-compose.yml 片段
一个最小可用的 Trivy + Docker Bench 组合服务:
services:
auditor:
image: your-audit-image:1.0
user: "1001:1001"
security_opt:
- no-new-privileges:true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./reports:/report
- ./policy:/etc/audit-policy:ro
environment:
- REPORT_DIR=/report
entrypoint: ["/bin/sh", "-c"]
command: >
audit-host &&
audit-image nginx:1.25 > /report/image-result.json 2>&1 || exit 1运行 docker-compose run --rm auditor 即可完成主机合规检查 + 镜像漏洞扫描双任务,结果落盘即用。











