使用 --json 参数以 JSON 格式输出事件
在本步骤中,我们将学习如何通过 docker events 命令配合 --json 参数以 JSON 格式输出 Docker 事件。JSON 格式的输出对于程序化处理以及与其他工具的集成非常有用。
首先,请确保你位于 ~/project/my-compose-app 目录中。
cd ~/project/my-compose-app
现在,让我们运行带有 --json 参数的 docker events 命令。这将以 JSON 格式流式输出事件。
docker events --json
你将看到连续的 JSON 对象流,每个对象代表一个 Docker 事件。输出内容大致如下(具体细节会有所不同):
{"status":"create","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"create","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886400,"timeNano":1678886400123456789}
{"status":"start","id":"1234567890abcdef...","from":"nginx:latest","Type":"container","Action":"start","Actor":{"ID":"1234567890abcdef...","Attributes":{"image":"nginx:latest","name":"my-compose-app-web-1"}},"scope":"local","time":1678886401,"timeNano":1678886401987654321}
...
每一行都是一个有效的 JSON 对象,包含事件的详细信息,如事件 status、受影响对象的 id、Type、Action,以及包含镜像名称和容器名称等 Attributes 的 Actor 详情。
为了演示如何捕获这些事件,让我们在 docker events --json 命令运行于另一个终端或后台时,先停止再启动 web 服务。由于本实验只使用单个终端,我们将先按 Ctrl + C 停止 docker events --json 命令。
现在,让我们停止 web 服务。
docker-compose stop web
你应该会看到表明 web 容器正在停止的输出。
[+] Stopping 1/1
⠿ Container my-compose-app-web-1 Stopped
现在,让我们在后台运行 docker events --json,然后再次启动服务。我们将使用 & 符号让命令在后台运行。
docker events --json &
你将看到一个进程 ID (PID) 被打印出来,表明命令正在后台运行。
现在,再次启动 web 服务。
docker-compose start web
你应该会看到表明 web 容器正在启动的输出。
[+] Starting 1/1
⠿ Container my-compose-app-web-1 Started
运行在后台的 docker events --json 命令将捕获 stop 和 start 事件。要查看后台进程的输出,你可能需要使用 fg 命令将其切换到前台,或者在后台进程停止后检查终端输出。不过对于本步骤的目的而言,仅运行带有 --json 参数的命令就足以理解输出格式。
要停止后台的 docker events --json 进程,你可以使用 jobs 命令列出后台任务,然后使用 kill %<任务编号>。或者,你也可以通过 ps aux | grep 'docker events --json' 查找进程 ID 并使用 kill 命令配合 PID。在本场景中更简单的方法是直接进入下一步,因为后台进程不会造成显著影响。
在本步骤中,我们成功使用 --json 参数以结构化的 JSON 格式查看 Docker 事件,这对于自动化和分析非常有价值。