2016-12-17 94 views
4

我有碼頭網絡「my_network」。我想用docker network rm my_network刪除這個碼頭網絡。在此之前,我應該從我的網絡中斷開所有容器。我可以使用docker network inspect並獲得輸出像碼頭從碼頭網絡斷開所有集裝箱

[ 
    { 
     "Name": "my_network", 
     "Id": "aaaaaa", 
     "Scope": "some_value", 
     "Driver": "another_value", 
     "EnableIPv6": bool_value, 
     "IPAM": { 
      "Driver": "default", 
      "Options": {}, 
      "Config": [ 
       { 
        "Subnet": "10.0.0.0/1" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Containers": { 
      "bbb": { 
       "Name": "my_container_1", 
       "EndpointID": "ENDPOITID1", 
       "MacAddress": "MacAddress1", 
       "IPv4Address": "0.0.0.0/1", 
       "IPv6Address": "" 
      }, 
      "ccc": { 
       "Name": "my_container_2", 
       "EndpointID": "ENDPOINTID2", 
       "MacAddress": "MacAddress2", 
       "IPv4Address": "0.0.0.0/2", 
       "IPv6Address": "" 
      } 
     }, 
     "Options": {}, 
     "Labels": {} 
    } 
] 

這是沒關係的手動斷開,如果我只有幾個容器,但如果我有50個集裝箱我有問題。 如何使用單個或多個命令從該網絡斷開所有容器?

回答

5

docker network inspect有一個format option

這意味着你可以列出所有容器名用:

docker network inspect -f '{{range .Containers}}{{.Name}}{{end}}' network_name 

那麼這應該是容易的,通過腳本,來讀取每個名稱,並調用docker network disconnect

wwerner提出下面in the comments以下命令:

for i in ` docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' network_name`; do docker network disconnect -f network_name $i; done; 

在多個線對可讀性:

for i in ` docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' network_name`;\ 
    do \ 
    docker network disconnect -f network_name $i; \ 
    done; 

添加:

注意,有格式作爲空間反對以空格分隔名字的答案。

+0

請問您能否將'docker inspect'修復爲'docker network inspect'。 它確實有效!非常感謝。 –

+0

要添加一個副本'n'pasteable解決方案:''爲我'在碼頭網絡中檢查-f'{{.Containers}} {{。Name}} {{end}}'network_name';做碼頭網絡斷開連接-f網絡名稱$我;完成;''。請注意,格式中有一個空格,而不是以空格分隔名稱的答案。 – wwerner

+0

@wwerner謝謝。我已將您的命令包含在答案中,以提高可見性。 – VonC