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

时间:2017-01-31 15:00:17

标签: docker

我试图获取Docker网络列表并使用Docker HTTP API 1.24按名称过滤。

由于某种原因,过滤器的文档记录极差,整个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

这些不会过滤我们的任何内容,返回完整的网络列表。

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

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

2 个答案:

答案 0 :(得分:4)

感谢BMitch for valuable hint Docker调试模式,它允许跟踪传入的HTTP请求。

关于对Docker的GET请求的curl params的一些注释:

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

答案 1 :(得分:3)

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

进行本地测试
Console.OutputEncoding = System.Text.Encoding.UTF8

日志中生成的过滤器是:

docker network ls -f name=MyNetwork

编码,看起来像:

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