首页 > 解决方案 > docker stats --one-shot 解释

问题描述

我正在尝试实现一个 api 端点,docker stats --one-shot但我根本不明白 --one-shot 和 --no-stream 之间的区别。API 文档位于此处,但说明不多。我知道这似乎是一个简单的问题,但我是 docker api 的新手,似乎不太清楚。谢谢你。

标签: dockerdocker-api

解决方案


如果您指定one-shot=true,则 precpu stats 将为空。默认情况下,在服务器端运行第二次检查以填充此值,但这会导致额外的 2 秒延迟:

$ curl -s --unix-socket /var/run/docker.sock 'http://localhost/containers/76c22a363ea8900ddd7ecee74fd6bb19d5dd7c50a26695e6b0dee5c353e2174d/stats?stream=false&one-shot=true' | jq .precpu_stats
{
  "cpu_usage": {
    "total_usage": 0,
    "usage_in_kernelmode": 0,
    "usage_in_usermode": 0
  },
  "throttling_data": {
    "periods": 0,
    "throttled_periods": 0,
    "throttled_time": 0
  }
}

$ curl -s --unix-socket /var/run/docker.sock 'http://localhost/containers/76c22a363ea8900ddd7ecee74fd6bb19d5dd7c50a26695e6b0dee5c353e2174d/stats?stream=false&one-shot=false' | jq .precpu_stats
{
  "cpu_usage": {
    "total_usage": 336500498536,
    "percpu_usage": [
      42273785950,
      42067912050,
      42236140288,
      42504140826,
      42151800123,
      41175670348,
      41403446188,
      42687602763
    ],
    "usage_in_kernelmode": 6110000000,
    "usage_in_usermode": 97120000000
  },
  "system_cpu_usage": 70752558350000000,
  "online_cpus": 8,
  "throttling_data": {
    "periods": 0,
    "throttled_periods": 0,
    "throttled_time": 0
  }
}

推荐阅读