2017-01-31 61 views
2

我試圖獲取Docker網絡列表並使用Docker HTTP API 1.24過濾名稱。Docker遠程API過濾器:按名稱過濾掉網絡

出於某種原因,過濾器記錄的極端不好,整個碼頭工人文檔中的非常簡單的例子是這樣的一個(和它的作品):

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

什麼是混亂的,這種孤獨的例子似乎違背官方泊塢窗記法過濾器:

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


這些那些不過濾任何我們,返回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"}' 

我在做什麼錯?非常感謝。

回答

3

我通過把我的服務器進入調試模式和運行的本地測試:

docker network ls -f name=MyNetwork 

在日誌中產生的過濾器是:

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

編碼,它看起來像:

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

感謝BMitch的valuable hint碼頭工人調試模式,它允許跟蹤傳入的HTTP請求。

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 

約捲曲params用於在GET請求泊塢的一些注意事項