我试图获取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"}'
我做错了什么?非常感谢。
答案 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}}"