如何为 docker 事件输出解析包含带有 --format 的点的属性?

How to parse attributes which contains dots with --format for docker events output?

我正在尝试解析 docker events 输出并使用 --format 参数对其进行格式化。 它适用于基本属性,但是我无法使用包含点的属性,例如来自 Docker Swarm 的属性。

这是一个例子:

$ docker events --since=5m --until=1s --filter type=container --format '{{ json . }}'
{
  "status": "oom",
  "id": "23916078dbf062b02edf36ae1de3cdd6d439d11cad29acc72daffcc1ac8981b9",
  "from": "(redacted)",
  "Type": "container",
  "Action": "oom",
  "Actor": {
    "ID": "23916078dbf062b02edf36ae1de3cdd6d439d11cad29acc72daffcc1ac8981b9",
    "Attributes": {
      "com.docker.stack.namespace": "beta-client",
      "com.docker.swarm.node.id": "woxyp548c8yat5nizwzmar6ia",
      "com.docker.swarm.service.id": "5j72edfv4sda554gqu0paaxu2",
      "com.docker.swarm.service.name": "beta-client_task",
      "com.docker.swarm.task": "",
      "com.docker.swarm.task.id": "ib57fy6em8hz1cfbrua518r2i",
      "com.docker.swarm.task.name": "beta-client_task.1.ib57fy6em8hz1cfbrua518r2i",
      "image": "(redacted)",
      "name": "beta-client_task.1.ib57fy6em8hz1cfbrua518r2i"
    }
  },
  "scope": "local",
  "time": 1559032467,
  "timeNano": 1559032467083181300
}

我想在 Actor.Attributes 中获取 com.docker.stack.namespace 属性(不使用像 jq 这样的外部工具)。

但是属性名称中的点阻止我访问该属性,并且引用它似乎不起作用:

$ docker events --since=5m --until=1s --filter type=container --format '{{ .Actor.Attributes."com.docker.stack.namespace" }}'
Error parsing format: template: :1: bad character U+0022 '"'

感谢您的帮助!

如果参数名中也有.,则不能使用.。尝试 index,如下所示:

--format '{{ index .Actor.Attributes "com.docker.stack.namespace" }}'