我正在尝试获取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)
我究竟做错了什么?非常感谢。
我通过将服务器置于调试模式并运行以下命令在本地进行了测试:
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)
由于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)
归档时间: |
|
查看次数: |
1219 次 |
最近记录: |