Docker远程API过滤器已退出

时间:2015-01-20 20:04:33

标签: docker

我在Docker Remote API文档中看到过滤器可用于过滤状态,但我不确定如何形成请求:

https://docs.docker.com/reference/api/docker_remote_api_v1.16/#list-containers

GET /containers/json?filters=status[exited] ?????

如何将其格式化为仅显示已退出的容器?

3 个答案:

答案 0 :(得分:15)

jwoddercorrect on the filter但我想逐步完成这一步骤,因为我对Go数据类型并不熟悉。

Docker API documentation指的是使用map[string][]string过滤器,这是一个Go map(哈希表)

  • map[string]定义了一个包含string

  • 类型键的地图
  • []string是地图中值的类型定义。一片 []是一个没有固定长度的数组。然后切片由 string值。

因此API需要包含字符串的数组的哈希映射。此Go Playground演示了对Go过滤器数据进行编组:

mapS := map[string][]string{ "status":[]string{"exited"} }

进入JSON:

{ "status": [ "exited" ] }

因此,将JSON添加到您获得的Docker API请求中:

GET /containers/json?all=1&filters={%22status%22:[%22exited%22]}
包含

all=1以报告已退出的容器(如命令行中的-a)。

如果他们刚刚记录了API的JSON结构,那么非Go人员可能会更容易:/

答案 1 :(得分:4)

通过阅读文档,它应该是:

GET /containers/json?filters={"status":["exited"]}

但其中一些可能需要进行URL编码。

答案 2 :(得分:4)

使用带有curl的docker最优雅的方式,并且不需要在this answer中找到编码。基本上,它告诉curl使用数据作为查询参数并对其进行编码。要获取退出的容器,查询可能如下所示:

curl -G -XGET "http://localhost:5555/containers/json" \
    -d 'all=1' \
    --data-urlencode 'filters={"status":["exited"]}' | python -m json.tool