Docker远程API过滤器已退出

Ken*_*n J 5 docker

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

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

GET /containers/json?filters=status[exited] ?????
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*att 15

jwodder 在过滤器上正确的,但我想逐步完成这一步,因为我不熟悉Go数据类型.

所述多克尔API文档是指使用map[string][]string用于过滤器,这是一种围棋地图(哈希表)

  • map[string] 定义具有类型键的映射 string

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

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

mapS := map[string][]string{ "status":[]string{"exited"} }
Run Code Online (Sandbox Code Playgroud)

进入JSON:

{ "status": [ "exited" ] }
Run Code Online (Sandbox Code Playgroud)

因此,将JSON添加到Docker API请求中:

GET /containers/json?all=1&filters={%22status%22:[%22exited%22]}
Run Code Online (Sandbox Code Playgroud)

all=1包含报告已退出的容器(如-a在命令行上).

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


jwo*_*der 5

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

GET /containers/json?filters={"status":["exited"]}
Run Code Online (Sandbox Code Playgroud)

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


Ant*_*nov 5

在curl中使用docker且不打扰编码的最优雅的方法是我在此答案中找到的。基本上,它告诉curl使用数据作为查询参数并对其进行编码。要退出容器,查询可能类似于:

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