使用 --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 事件,这对于自动化和分析非常有价值。