1. connect 将某个容器连接到一个docker网络create 创建一个docker局域网络
  2. disconnect 将某个容器退出某个局域网络
  3. inspect 显示某个局域网络信息
  4. ls 显示所有docker局域网络
  5. prune 删除所有未引用的docker局域网络
  6. rm 删除docker网络


一、拉取镜像创建容器

  1. [liqingfei@docker ~]$ sudo docker pull liqingfei01/cnetos7-test01
  2. [liqingfei@docker ~]$ sudo docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. liqingfei01/cnetos7-test01 latest 631c6a5a54fd 9 minutes ago 530MB

创建两个容器:

[liqingfei@docker ~]$ sudo docker run -itd --name=test1 liqingfei01/cnetos7-test01
[liqingfei@docker ~]$ sudo docker run -itd --name=test2 liqingfei01/cnetos7-test01
[liqingfei@docker ~]$ sudo docker ps
CONTAINER ID   IMAGE                        COMMAND       CREATED          STATUS          PORTS     NAMES
c8a6c9505249   liqingfei01/cnetos7-test01   "/bin/bash"   20 seconds ago   Up 19 seconds             test2
6b41c2a447a0   liqingfei01/cnetos7-test01   "/bin/bash"   36 seconds ago   Up 36 seconds             test1

二、查看网络连接状态

[liqingfei@docker ~]$ sudo docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
ad6c4a9868fa   bridge    bridge    local
fd017b022141   host      host      local
ca3235108b83   none      null      local

这里有个bridge,默认情况下创建的所有容器都会在bridge网段;查看bridge网段详情通常是

[liqingfei@docker ~]$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "ad6c4a9868fa9a4de69c157aff2eaa94179d21c4062714a92994ab0d3448b19f",
        "Created": "2021-05-12T09:53:27.862628537+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.7.21.0/24",
                    "Gateway": "172.7.21.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "6b41c2a447a04c04ae9bc5238ffdfb5265d7f519021d38e660a4f22c5d90dc01": {
                "Name": "test1",
                "EndpointID": "af200398b12aab4dbbb4d69eb6b2756ee13de691333726c61101721f14d6959d",
                "MacAddress": "02:42:ac:07:15:02",
                "IPv4Address": "172.7.21.2/24",
                "IPv6Address": ""
            },
            "c8a6c95052496f867e89ec090c7534876fc5a598c201862194f6cdbb8c57f046": {
                "Name": "test2",
                "EndpointID": "29f7bc4ff16c3ac7d0f3a009a0de2b93b459b8bba081f09db486589ca7228a03",
                "MacAddress": "02:42:ac:07:15:03",
                "IPv4Address": "172.7.21.3/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

这里我们下在一个小插件:sudo yum install -y bridge-utils
这样执行 sudo brctl show

[liqingfei@docker ~]$ sudo brctl show
bridge name    bridge id        STP enabled    interfaces
bridge0        8000.000000000000    no        
docker0        8000.02420422ce3c    no        veth821e7dc
                            vethd0ab212

可以清晰简单的看到连接到各网段的容器
进入test1容器docker exec -it test1 sh

[liqingfei@docker ~]$ sudo docker exec -it test1 sh

在上图可以看到test2 的ip是172.7.21.3,那么我们ping一下test2试试看是否网络可通

[liqingfei@docker ~]$ sudo docker exec -it test1 sh
sh-4.2# ^C
sh-4.2# ping 172.7.21.3
PING 172.7.21.3 (172.7.21.3) 56(84) bytes of data.
64 bytes from 172.7.21.3: icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from 172.7.21.3: icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 172.7.21.3: icmp_seq=3 ttl=64 time=0.049 ms
64 bytes from 172.7.21.3: icmp_seq=4 ttl=64 time=0.056 ms
64 bytes from 172.7.21.3: icmp_seq=5 ttl=64 time=0.051 ms
64 bytes from 172.7.21.3: icmp_seq=6 ttl=64 time=0.055 ms
64 bytes from 172.7.21.3: icmp_seq=7 ttl=64 time=0.059 ms
^C
--- 172.7.21.3 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 5999ms
rtt min/avg/max/mdev = 0.049/0.055/0.069/0.010 ms

是可以的 因为其在同一各网段;那么直接ping容器名字呢?

sh-4.2# ping test2
ping: unknown host test2
sh-4.2#

那么使用—link 简单的命令试试结果吧

[liqingfei@docker ~]$ sudo docker run -d -it --link test2 --name test3 liqingfei01/cnetos7-test01
[liqingfei@docker ~]$ sudo docker exec -it test3 /bin/sh
sh-4.2# ping test2
PING test2 (172.7.21.3) 56(84) bytes of data.
64 bytes from test2 (172.7.21.3): icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from test2 (172.7.21.3): icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from test2 (172.7.21.3): icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from test2 (172.7.21.3): icmp_seq=4 ttl=64 time=0.052 ms
64 bytes from test2 (172.7.21.3): icmp_seq=5 ttl=64 time=0.047 ms
^C
--- test2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.047/0.055/0.073/0.011 ms

sh-4.2# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.7.21.3    test2 c8a6c9505249
172.7.21.4    df5748325c69

三、那么如果不是在bridge网段的同期是否能ping通呢

首先建一个网段取名为:my-bridge

[liqingfei@docker ~]$ sudo docker network create --driver  bridge my-bridge
5054f103cc9db5c947703aab35befced6627505081446355984d119d969a25c4
[liqingfei@docker ~]$ sudo docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
ad6c4a9868fa   bridge      bridge    local
fd017b022141   host        host      local
5054f103cc9d   my-bridge   bridge    local
ca3235108b83   none        null      local

其中–driver是表示基于后面参数bridge建立的网段my-bridge,创建一个在my-bridge网段的容器

[liqingfei@docker ~]$ sudo docker network inspect my-bridge
[
    {
        "Name": "my-bridge",
        "Id": "5054f103cc9db5c947703aab35befced6627505081446355984d119d969a25c4",
        "Created": "2021-05-16T22:03:41.188441682+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]


[liqingfei@docker ~]$ sudo docker run -itd --name=test5 --network=my-bridge liqingfei01/cnetos7-test01
183d94d54fabc9e53ee1d966c02be12723013af00f1149492b3f1410a93c977e
很显然test5 和test1.2.3都不在一个网段
[liqingfei@docker ~]$ sudo docker network inspect my-bridge
[
    {
        "Name": "my-bridge",
        "Id": "5054f103cc9db5c947703aab35befced6627505081446355984d119d969a25c4",
        "Created": "2021-05-16T22:03:41.188441682+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "183d94d54fabc9e53ee1d966c02be12723013af00f1149492b3f1410a93c977e": {
                "Name": "test5",
                "EndpointID": "12278a27b68215882fac223b8499884aadf86ff1ea2b232491662b402390b27d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

测试ping

[liqingfei@docker ~]$ sudo docker exec -it test5 /bin/sh
sh-4.2# ping test3
ping: unknown host test3
sh-4.2# ping test2
ping: unknown host test2
sh-4.2# ping test1
ping: unknown host test1

不行的,先看看网络连接

[liqingfei@docker ~]$ sudo docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
ad6c4a9868fa   bridge      bridge    local
fd017b022141   host        host      local
5054f103cc9d   my-bridge   bridge    local
ca3235108b83   none        null      local
[liqingfei@docker ~]$ sudo br
brctl   break   bridge  
[liqingfei@docker ~]$ sudo brctl show
bridge name    bridge id        STP enabled    interfaces
br-5054f103cc9d        8000.024241792fef    no        vethbc3da60
bridge0        8000.000000000000    no        
docker0        8000.02420422ce3c    no        veth821e7dc
                            vethd0ab212
                            vethee656e9

我们把test5也加入bridge网段(test5会有两个ip)

[liqingfei@docker ~]$ sudo docker network connect bridge test5
[liqingfei@docker ~]$ sudo brctl show
bridge name    bridge id        STP enabled    interfaces
br-5054f103cc9d        8000.024241792fef    no        vethbc3da60
bridge0        8000.000000000000    no        
docker0        8000.02420422ce3c    no        veth02c3256
                            veth821e7dc
                            vethd0ab212
                            vethee656e9

[liqingfei@docker ~]$ sudo docker exec -it test5 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 27  bytes 2956 (2.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 954 (954.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.7.21.5  netmask 255.255.255.0  broadcast 172.7.21.255
        ether 02:42:ac:07:15:05  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12  bytes 1152 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 1152 (1.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


[liqingfei@docker ~]$ sudo docker network inspect bridge
......
        },
        "ConfigOnly": false,
        "Containers": {
            "183d94d54fabc9e53ee1d966c02be12723013af00f1149492b3f1410a93c977e": {
                "Name": "test5",
                "EndpointID": "d05a7178ec2d2b3567349fc810c0a7960c64e467b7f49bed1378fe40e0b70365",
                "MacAddress": "02:42:ac:07:15:05",
                "IPv4Address": "172.7.21.5/24",
                "IPv6Address": ""
            },
            "6b41c2a447a04c04ae9bc5238ffdfb5265d7f519021d38e660a4f22c5d90dc01": {
                "Name": "test1",
                "EndpointID": "af200398b12aab4dbbb4d69eb6b2756ee13de691333726c61101721f14d6959d",
                "MacAddress": "02:42:ac:07:15:02",
                "IPv4Address": "172.7.21.2/24",
                "IPv6Address": ""
            },
            "c8a6c95052496f867e89ec090c7534876fc5a598c201862194f6cdbb8c57f046": {
                "Name": "test2",
                "EndpointID": "29f7bc4ff16c3ac7d0f3a009a0de2b93b459b8bba081f09db486589ca7228a03",
                "MacAddress": "02:42:ac:07:15:03",
                "IPv4Address": "172.7.21.3/24",
                "IPv6Address": ""
            },
            "df5748325c697dd03d969ba1b8fdd111401ccc934103411245c1c7b9fc2266a7": {
                "Name": "test3",
                "EndpointID": "b0eefb5f81f14ce71790f756f8376941f640740a8714060ce97f3e1e43a5fc64",
                "MacAddress": "02:42:ac:07:15:04",
                "IPv4Address": "172.7.21.4/24",
                "IPv6Address": ""
            }
        },
......

test5测试ping (test1,2,3)

[liqingfei@docker ~]$ sudo docker exec -it test5  ping 172.7.21.2
PING 172.7.21.2 (172.7.21.2) 56(84) bytes of data.
64 bytes from 172.7.21.2: icmp_seq=1 ttl=64 time=0.092 ms
64 bytes from 172.7.21.2: icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from 172.7.21.2: icmp_seq=3 ttl=64 time=0.053 ms
^C
--- 172.7.21.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.053/0.066/0.092/0.020 ms
[liqingfei@docker ~]$ sudo docker exec -it test5  ping 172.7.21.3
PING 172.7.21.3 (172.7.21.3) 56(84) bytes of data.
64 bytes from 172.7.21.3: icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from 172.7.21.3: icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from 172.7.21.3: icmp_seq=3 ttl=64 time=0.049 ms
^C
--- 172.7.21.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.049/0.062/0.084/0.016 ms
[liqingfei@docker ~]$ sudo docker exec -it test5  ping 172.7.21.4
PING 172.7.21.4 (172.7.21.4) 56(84) bytes of data.
64 bytes from 172.7.21.4: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from 172.7.21.4: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 172.7.21.4: icmp_seq=3 ttl=64 time=0.049 ms
^C
--- 172.7.21.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.047/0.058/0.080/0.017 ms

一、实现不同网段容器网络互通

[liqingfei@docker02 ~]$ sudo docker network create    mac_net2
e5df64155c21beabe3a6f56636d21ac6e403d21d733bdf5f4ddeebcae4dbad6b

[liqingfei@docker02 ~]$ sudo docker network create    mac_net3
8600631ea7fbe0ab39a386f0010331d2b76fdd987d956feac94ded2a3cc5cf6f

[liqingfei@docker02 ~]$ sudo docker network  ls
NETWORK ID     NAME       DRIVER    SCOPE
26f0c61328c6   bridge     bridge    local
202bac44a904   host       host      local
a2f696c7a8b0   mac_net1   macvlan   local
e5df64155c21   mac_net2   bridge    local
8600631ea7fb   mac_net3   bridge    local
a9ad2008a52d   none       null      local

[liqingfei@docker02 ~]$ sudo docker inspect  mac_net2
[
    {
        "Name": "mac_net2",
        "Id": "e5df64155c21beabe3a6f56636d21ac6e403d21d733bdf5f4ddeebcae4dbad6b",
        "Created": "2021-05-17T00:19:09.852711194+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

[liqingfei@docker02 ~]$ sudo docker inspect  mac_net3
[
    {
        "Name": "mac_net3",
        "Id": "8600631ea7fbe0ab39a386f0010331d2b76fdd987d956feac94ded2a3cc5cf6f",
        "Created": "2021-05-17T00:19:14.268346954+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

[liqingfei@docker02 ~]$ sudo docker run -itd --name test1  --network mac_net2 liqingfei01/cnetos7-test01
387e7d536347ab04313f460afc702319b85998f0d5b204f0831bed0f0a3eae5d

[liqingfei@docker02 ~]$ sudo docker run -itd --name test2  --network mac_net3 liqingfei01/cnetos7-test01
14ccbbb0466e76935b7bfdc8d12e88b4109986cb3058ce7e84b04ad479cca774

[liqingfei@docker02 ~]$ sudo docker exec  -it test1 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 13  bytes 1102 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[liqingfei@docker02 ~]$ sudo docker exec  -it test2 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
        RX packets 13  bytes 1102 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

liqingfei@docker02 ~]$ sudo docker exec  -it test2  /bin/bash
[root@14ccbbb0466e /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.

-- 172.17.0.2 ping statistics ---
34 packets transmitted, 0 received, 100% packet loss, time 32999ms

[liqingfei@docker02 ~]$ sudo docker network  connect  mac_net2 test2

[liqingfei@docker02 ~]$ sudo docker exec  -it test2  /bin/bash
[root@4240f0c9ccbc /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.053 ms
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.053/0.062/0.072/0.012 ms

[root@4240f0c9ccbc /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
        RX packets 19  bytes 1118 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 368  bytes 35448 (34.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 12  bytes 936 (936.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 280 (280.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0