Docker 远程 API 过滤器已退出

Docker Remote API Filter Exited

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

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

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

如何设置格式以仅显示退出的容器?

根据我对文档的阅读,应该是:

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

不过,其中一些可能需要 URL 编码。

jwodder is 但由于我不熟悉 Go 数据类型,所以我想逐步完成此过程。

Docker API documentation指的是使用一个map[string][]string作为一个filter,是一个Go map(hashtable)

  • 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)。

对于非 Go 人员来说,如果他们只是记录 API 的 JSON 结构可能会更容易:/

将 docker 与 curl 一起使用的最优雅的方式,不用担心我在 this answer 中发现的编码。基本上,它告诉 curl 使用数据作为查询参数并对它进行编码。要退出容器,查询可能如下所示:

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