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]stringtypes的键定义映射

  • []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