Docker远程API过滤器:按名称过滤网络

Ole*_*ova 3 docker

我正在尝试获取Docker网络列表并使用Docker HTTP API 1.24按名称对其进行过滤。

出于某种原因,过滤器的文档非常差,整个Docker文档中的唯一示例就是这个示例(并且可以正常工作):

GET /networks?filters={"type":{"custom":true}} HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

令人困惑的是,这个孤独的示例似乎与过滤器的官方Docker符号相矛盾:

map[string][]string

在这里讨论:https : //stackoverflow.com/a/28055631/4486909

API规范也没有太大帮助:

Query parameters:
  filters - JSON encoded network list filter. The filter value is one of:
  driver=<driver-name> Matches a network’s driver.
  id=<network-id> Matches all or part of a network id.
  label=<key> or label=<key>=<value> of a network label.
  name=<network-name> Matches all or part of a network name.
  type=["custom"|"builtin"] Filters networks by type.
Run Code Online (Sandbox Code Playgroud)

http://docs.master.dockerproject.org/engine/reference/api/docker_remote_api_v1.24/#/list-networks


这些不过滤任何内容,返回netwroks的完整列表。

curl -vg -X GET "v1.24/networks" --data-urlencode 'filters={"name":["MyNetwork"]}'

curl -vg -X GET "v1.24/networks" --data-urlencode 'filters={"name":["MyNetwork":true]}'

curl -vg -X GET "v1.24/networks" --data-urlencode 'filters={"name":"MyNetwork"}'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?非常感谢。

BMi*_*tch 5

我通过将服务器置于调试模式并运行以下命令在本地进行了测试:

docker network ls -f name=MyNetwork
Run Code Online (Sandbox Code Playgroud)

日志中的最终过滤器为:

filters={"name":{"MyNetwork":true}}"
Run Code Online (Sandbox Code Playgroud)

编码后,它看起来像:

/v1.25/networks?filters=%7B%22name%22%3A%7B%22MyNetwork%22%3Atrue%7D%7D"
Run Code Online (Sandbox Code Playgroud)


Ole*_*ova 5

由于BMitch为有价值的提示,以泊坞调试模式,它允许跟踪传入的HTTP请求。

有关对Docker的GET请求的curl参数的一些说明:

curl -gG -XGET "v1.24/networks" --data-urlencode 'filters={"name":{"MyNetwork":true}}'
-g = disable globbing, necessary for JSON proper proccessing
-G = include --data-urlencode contents into GET
Run Code Online (Sandbox Code Playgroud)