bigywater.tech
Docker · 74

docker events:守护进程事件流里有什么

docker events 到底有哪些事件、字段长什么样、怎么过滤、能回看多久?这篇用一轮完整的操作把事件按顺序列出来,并测出历史回看的上限。

15 条事件
创建卷和网络、打 tag、run 一个容器、清理资源,docker events 记录的事件数
256 条
--since 1h 和 --since 24h 都只能取到的事件数
create → mount → unmount → destroy
卷的完整事件序列

事件序列

实测 · 本机执行输出
  操作:创建卷和网络、给镜像打 tag、run --rm 一个挂卷并接网络的容器、删 tag、删卷和网络
  这段时间 docker events 共 15 条,其中和这次实验相关的 15 条
    volume     create       bwlab-c69v
    network    create       bwlab-c69n
    image      tag          bwlab-c69-tagged:1
    container  create       bwlab-c69c
    container  attach       bwlab-c69c
    volume     mount        bwlab-c69v
    network    connect      bwlab-c69n
    container  start        bwlab-c69c
    network    disconnect   bwlab-c69n
    volume     unmount      bwlab-c69v
    container  die          bwlab-c69c
    container  destroy      bwlab-c69c
    image      untag        bwlab-c69-tagged:1
    volume     destroy      bwlab-c69v
    network    destroy      bwlab-c69n

容器 create、attach、start、die、destroy;卷 create、mount、unmount、destroy;网络 create、connect、disconnect、destroy;镜像 tag、untag。--rm 的容器 die 之后紧跟着 destroy。

字段

实测 · 本机执行输出
  顶层字段:['Action', 'Actor', 'Type', 'scope', 'time', 'timeNano']
  Actor.Attributes 里有:['bwlab', 'desktop.docker.io/ports.scheme', 'image', 'name']
  time=1791639558(秒)timeNano=1791639558413056755(纳秒)

JSON 格式下每条事件有 Type、Action、Actor(含 ID 和 Attributes)、scope、time、timeNano。容器的 Actor.Attributes 带 name、image 和镜像/容器上的标签,可以用来按标签过滤。

过滤

实测 · 本机执行输出
  --filter type=network:network/create ; network/connect ; network/disconnect ; network/destroy
  --filter type=container --filter event=die:container/die
  --filter container=bwlab-c69c2 --filter event=start --filter event=die:container/start ; container/die

--filter type=…、event=…、container=… 可以组合。过滤的是 docker events 命令的输出,不影响 docker 记录事件。

回看

实测 · 本机执行输出
  --since 1h 能取到 256 条;最早的是 232 秒前
  --since 24h 能取到 256 条;最早的是 3 分钟前

--since 无论写 1h 还是 24h,都只拿到 256 条。想长期保留事件,要用 docker events 持续订阅并自己存储。

分步演示

docker events
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 arm64 / Docker Desktop(Engine 29.8.2,容器跑在 Docker Desktop 自带的 Linux 虚拟机里,内核与宿主机的 macOS 不同);镜像为 linux/arm64;需要看虚拟机内部时用特权容器 + nsenter;计时用 time / date +%s%N,数字每次运行会有小幅抖动。事件由 docker events --since/--until 取出(JSON 格式),用 Python 解析;卷、网络、容器、镜像名都以 bwlab-c69 开头;回看上限用 --since 1h 与 24h 两次查询得到;实验后已删除资源
    • 没有验证:256 条上限的原因和配置、daemon 类事件、插件事件、health_status 与 oom 事件(见 c65、c37)、高事件量下的丢失、docker events 的 --until 与实时流的差别
    京ICP备2026067502号-1京公网安备11010502063487号