直接监听 /var/run/docker.sock 是感知容器“诞生痕迹”最底层、最及时的方式;可通过 docker events 实时捕获启动事件,falco 检测高危行为,cadvisor+prometheus 持久化指标,或自定义脚本调用 docker api 事件流。
直接监听 /var/run/docker.sock 是感知容器“诞生痕迹”最底层、最及时的方式——它不依赖日志轮转、不经过中间采集层,而是直连 docker 守护进程的事件总线,容器一创建(哪怕只存活几秒),事件就已发出。
用 docker events 实时捕获容器启动事件
这是最轻量、无需额外部署的方案。Docker 自带 docker events 命令,本质就是长连接到 docker.sock 订阅事件流:
- 运行
docker events --filter 'event=start' --filter 'type=container',即可持续输出所有容器的启动事件 - 加上
--format '{{.Time}} {{.Actor.Attributes.name}} ({{.ID}}) started as {{.Actor.Attributes.image}}'可结构化输出,便于解析或入库 - 注意:该命令默认只显示当前时间点之后的事件,如需历史追溯,需配合日志归档或使用 Falco 等工具持久化事件流
用 Falco 检测高危启动行为
Falco 是专为容器运行时安全设计的开源工具,它通过监听 docker.sock(或 eBPF)获取原始事件,并支持规则引擎实时匹配:
- 例如检测特权启动:
container.privileged = true或container.capabilities.add contains "NET_ADMIN" - 事件触发后可立即输出告警(含镜像名、容器 ID、用户、能力集等上下文),并支持对接 Slack、企业微信、Prometheus Alertmanager
- 规则无需日志解析,字段如
container.privileged直接来自 Docker API 响应,毫秒级响应
用 cAdvisor + Prometheus 持久化容器生命周期指标
cAdvisor 会主动轮询 docker.sock,不仅记录“启动”,还持续跟踪容器从创建、运行到退出的完整状态变迁:
- 启动时生成
container_last_seen{container_name="xxx"}时间戳指标 - 结合
container_start_time_seconds,可计算容器存活时长、频次、重启率 - Prometheus 抓取这些指标后,即可用 Grafana 绘制“每分钟新启容器数”趋势图,发现异常突发(如批量拉起、扫描行为)
用自定义脚本监听 socket 事件流(进阶)
若需深度定制或集成到已有系统,可直接用 HTTP 长连接调用 Docker API:
- 向
http://localhost:2375/events(需启用 TCP socket)发起 GET 请求,保持连接 - 响应是 Server-Sent Events(SSE)格式的纯文本流,每行一个 JSON 事件对象
- 解析
status: "start"且Type: "container"的事件,提取Actor.ID、from(镜像)、Actor.Attributes中的标签与环境变量 - 适合做容器血缘分析、启动来源审计(比如是否来自 CI/CD webhook 或某 IP 触发)











