我在Docker Remote API文档中看到过滤器可用于过滤状态,但我不确定如何形成请求:
https://docs.docker.com/reference/api/docker_remote_api_v1.16/#list-containers
GET /containers/json?filters=status[exited] ?????
如何将其格式化为仅显示已退出的容器?
答案 0 :(得分:15)
jwodder是correct 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