Docker断开所有容器与docker网络的连接

nic*_*bpe 5 bash docker docker-networking

我有docker网络"my_network".我想删除这个docker网络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": {}
    }
]
Run Code Online (Sandbox Code Playgroud)

如果我只有几个容器可以手动断开,但如果我有50个容器我有问题.如何使用单个或多个命令断开此网络中的所有容器?

Von*_*onC 8

docker network inspect有一个格式选项.

这意味着您可以列出所有Container名称:

docker network inspect -f '{{range .Containers}}{{.Name}}{{end}}' network_name
Run Code Online (Sandbox Code Playgroud)

然后,通过脚本,读取每个名称和调用应该很容易docker network disconnect.

wwerner 在评论中提出以下命令:

for i in ` docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' network_name`; do docker network disconnect -f network_name $i; done;
Run Code Online (Sandbox Code Playgroud)

多行可读性:

for i in ` docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' network_name`;\
  do \
     docker network disconnect -f network_name $i; \
  done;
Run Code Online (Sandbox Code Playgroud)

添加:

请注意,格式中有一个空格,而不是用空格分隔名称的答案.