docker events 命令用于实时监听 docker 守护进程事件,输出 json 格式事件流,支持按 type、event 等条件过滤,以及 --since/--until 时间范围和 --format 自定义格式,常用于调试、监控与脚本联动。
docker events 命令用于实时监听 docker 守护进程发出的各类事件,比如容器启动、停止、镜像拉取、网络创建等。它不执行操作,只输出事件流,适合调试、监控或与脚本联动。
基础用法:直接监听所有事件
运行以下命令即可开始接收实时事件:
- docker events —— 默认监听所有事件(需有 Docker 守护进程权限,通常需 sudo 或加入 docker 用户组)
- 每行输出一个 JSON 格式事件,包含 Type(如 container、image)、Action(如 start、pull)、ID、Time 等字段
- 按 Ctrl+C 可随时退出监听
按条件过滤事件
避免信息过载,可用 --filter(简写 -f)筛选特定类型或行为:
- docker events --filter 'event=start' —— 只显示 start 类型的动作(如容器启动)
- docker events --filter 'type=container' —— 仅容器相关事件
- docker events --filter 'type=image' --filter 'event=pull' —— 同时满足多个条件(镜像拉取)
- 支持的 filter 键包括:type、event、container(ID 或名称)、image、network、volume 等
配合时间与格式优化输出
让事件更易读或适配后续处理:
- docker events --since '2024-01-01' —— 从指定时间点起回溯事件(支持时间戳、相对时间如 10m、1h)
- docker events --until '2024-01-01T12:00:00' —— 截止到某时刻(常与 --since 联用做区间查询)
- docker events --format '{{.Type}} {{.Action}} {{.Actor.Attributes.name}}' —— 自定义输出格式,使用 Go 模板语法提取字段
- 例如:监听某容器并只打印其状态变化:docker events -f 'container=my-app' --format '{{.Action}} at {{.TimeNano}}'
在脚本中持续响应事件
可将 docker events 作为数据源,配合 while read 实时触发动作:
- 简单示例(Bash):
docker events --filter 'event=start' --filter 'type=container' | while read event; do
echo "【$(date)】容器已启动:$(echo $event | jq -r '.Actor.Attributes.name // .ID')" >> /var/log/docker-starts.log
done - 注意:确保系统已安装 jq(用于解析 JSON),且脚本有足够权限读取事件
- 生产环境建议加超时、错误重连和日志轮转逻辑,避免长连接中断导致漏事件











