Docker远程APIfilter:按名称过滤networking

我试图得到Dockernetworking列表,并通过名称使用Docker HTTP API 1.24进行过滤。

出于某种原因,filter的logging极其糟糕,整个Docker文档中的单个示例就是这一个(并且工作正常):

GET /networks?filters={"type":{"custom":true}} HTTP/1.1 

令人困惑的是,这个孤独的例子似乎与官方的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. 

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


这些不会过滤我们的任何东西,返回完整的networking列表。

 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"}' 

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

我通过将我的服务器置于debugging模式并运行:

 docker network ls -f name=MyNetwork 

日志中生成的filter是:

 filters={"name":{"MyNetwork":true}}" 

编码,它看起来像:

 /v1.25/networks?filters=%7B%22name%22%3A%7B%22MyNetwork%22%3Atrue%7D%7D" 

感谢BMitch为Dockerdebugging模式提供有价值的提示 ,它允许跟踪传入的HTTP请求。

关于GET请求到Docker的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