Docker远程API筛选器已退出
我在Docker Remote API Docs中看到,可以使用filter来过滤状态,但是我不确定如何形成请求:
https://docs.docker.com/reference/api/docker_remote_api_v1.16/#list-containers
GET /containers/json?filters=status[exited] ?????
这应该如何格式化显示只有退出的容器?
jwodder 在filter上是正确的,但是我想通过这一步一步走,因为我不熟悉Go数据types。
Docker API文档指的是使用map[string][]string
作为filter,这是一个Go map(散列表)
-
map[string]
用string
types的键定义映射 -
[]string
是地图中值的types定义。 slice[]
是一个没有固定长度的数组。 然后切片由string
值组成。
所以API需要包含string的数组的哈希映射。 Go Go Playground演示了编组Go Filter数据:
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
)。
如果他们只logging了API的JSON结构,那么非Go的人可能会更容易:/
通过阅读文档,应该是:
GET /containers/json?filters={"status":["exited"]}
不过,其中一些可能需要进行url编码。
最优雅的方式来使用docker与curl,并不打扰编码我在这个答案中find。 基本上,它告诉curl使用数据作为查询参数并对其进行编码。 要获取退出的容器,查询可能如下所示:
curl -G -XGET "http://localhost:5555/containers/json" \ -d 'all=1' \ --data-urlencode 'filters={"status":["exited"]}' | python -m json.tool