Docker网络(上)

简介: Docker网络

一、Docker网络简介


(1)查看Docker网络


******查看Docker的网络模式
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
edca3506ab93        bridge              bridge              local        
13dcc19e20b0        host                host                local
80abc22e3804        none                null                local
#Docker的三种模式
bridge:桥接模式,此模式下容器可以通过Docker0网卡和外网通信,也可以和宿主机的其他容器进行通信,但是不能和其他主机的容器进行通信,因为可以会造成ip地址冲突,此模式是docker的默认网络模式
host:仅主机模式,此模式下容器会跟宿主机共享网络地址
none:这个模式没有任何网络,此模式下容器不可以跟其他任何主机或容器进行通信,只有一个lo网卡,地址是127的回环地址


  • 每个容器都有ip,而这个ip是由Docker生成的Docker0网卡分配的,默认分配的网段就是172.17.0.0/16的网段,这个网段是可以自定义的,并且只有容器是bridge模式时,会自动分配


容器ip:

3ae1cafdf308497eb230f260fbbb1b84.png

Docker0 ip:


98069b1373d34c068f7fa3bfb15621bb.png

可以看到ip都是同网段的


  • 使用 Docker inspect 查看容器的详细信息,可以看到网关是指向Docker0网卡的


a3a7f6a5aa9441cd87088483b5071b62.png

在查看宿主机ip时,在Docker下面还有一块网卡,那块网卡就是容器的网卡

7559be978dd1444cbe08f7ed25b3340d.png

518cdf9698ff40e9ace4f8f170b6ac42.png


这里的网卡if12表示是宿主机的序列号为12的网卡,并且宿主机的12网卡后面是if11,可以看到容器的网卡序列号为11,都是互相对应的,而宿主机的veth网卡其实相当于一个虚拟交换机,用于容器和宿主机之间互相通信


二、Docker的bridge网络


bridge网络架构示意图:


宿主机的veth网卡在每一个容器创建后都会存在,作用就是相当于一个虚拟交换机,从下面的图可以看出每个veth网卡都连接这相应的容器和宿主机

31ccb855a17346efbeb71b0424d374ca.png


(1)创建使用bridge网络的容器

******查看bridge网络模式的信息
[root@docker ~]# docker network inspect bridge
******查看镜像默认映射的端口
[root@docker ~]# docker inspect nginx 
。。。。。。
            "ExposedPorts": {
                "80/tcp": {}      #这里就是镜像默认的端口
            },
。。。。。。
******查看容器的端口号
[root@docker ~]# docker run -d --name wen --net bridge nginx:latest     #创建一个不带-p或者-P选项的容器
dac2bcfad659ecaf0eff97401f15ad0bbd66b4ae21493ca39755f06334818653  
[root@docker ~]# docker run -d -P --name web2 nginx   #创建一个带-p或-P选项的容器
de7000efdc4a5ccb37c084faac2393542ec68edde723663d122468c640c4d178
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
de7000efdc4a        nginx               "/docker-entrypoint.…"   2 seconds ago       Up 1 second         0.0.0.0:32768->80/tcp   web2
dac2bcfad659        nginx:latest        "/docker-entrypoint.…"   9 minutes ago       Up 9 minutes        80/tcp                  wen
[root@docker ~]# docker port de7000efdc4a    #后面写容器的id,只能查看使用了-p或者-P选项启动的容器端口,容器启动如果没有指定端口映射,那么这个容器的端口就是它使用镜像的默认端口
80/tcp -> 0.0.0.0:32768
[root@docker ~]# docker port dac2bcfad659    #查看不带-P选项的容器是不会输出任何信息的

(2)修改容器的默认网段

#修改容器的默认网段只需要修改daemon.json文件即可
[root@docker ~]# vim /etc/docker/daemon.json    #修改文件
{
  "registry-mirrors": ["https://w4uieobw.mirror.aliyuncs.com"],  #这个是指定Docker Hub镜像仓库的URL
  "log-driver": "journald","bip":"192.168.200.1/24"            #这个就是设置Docker容器分配的网段,不能与宿主机同一网段
}
#保存退出
[root@docker ~]# systemctl restart docker   #重启docker,重启docker时会自动停止所有容器
[root@docker ~]# ip a | grep docker0      #查看docker0网卡网段,成功变成200网段
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
[root@docker ~]# docker ps -a    #查看容器,发现自动停止了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
c176da0ed7d2        tomcat:latest       "/bin/bash"         11 minutes ago      Exited (0) About a minute ago                       tomcat
[root@docker ~]# docker rm c176da0ed7d2   #先删除之前创建的容器
c176da0ed7d2
[root@docker ~]# docker run -it --name tomcat  tomcat:latest /bin/bash  #再次开启
root@65f3c83d9657:/usr/local/tomcat# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0   #查看ip发现成功修改
       valid_lft forever preferred_lft forever


三、none网络

#使用none网络的容器除了lo网卡,没有其他任何网卡,完全与外界隔离,适用于不需要访问外部服务也不运行外部服务访问自己的应用场景
******查看none网络的信息
[root@docker ~]# docker network inspect none
******创建使用none网络的容器
[root@docker ~]# docker run -it --name none --net none busybox:latest 
/ # ip a                       #查看网络发现只有lo一个网卡,只有一个回环地址,所以也无法和外部服务通信
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
/ # 

四、host网络


  • 使用host网络的主机,和宿主机共享网络地址,使用host网络模式可以使容器获得最好的数据转发性能
  • 也正因为和宿主机共享网络地址,所以在使用多个host网络的容器时,多个容器会共享宿主机的网络地址,这样就需要容器上运行服务的端口不能相同,如果有端口相同的服务就需要手动去修改端口号
  • 使用host模式一般只装一台容器,因为共享了宿主机的网络地址
******查看host网络的信息
[root@docker ~]# docker network inspect host
******创建使用host网络的容器
[root@docker ~]# docker run -it --name host --net host busybox:latest   
/ # ip a   #查看创建容器的网络信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:54:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.202/24 brd 192.168.100.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::34f4:cad:16ae:5b4d/64 scope link 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:54:96 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.146/24 brd 192.168.8.255 scope global dynamic ens34
       valid_lft 84610sec preferred_lft 84610sec
    inet6 fe80::e6e9:552d:5efd:87ac/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:a8:3c:15:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:a8ff:fe3c:15ee/64 scope link 
       valid_lft forever preferred_lft forever
6: veth1faa93d@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 5e:52:59:44:18:ad brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5c52:59ff:fe44:18ad/64 scope link 
       valid_lft forever preferred_lft forever
8: vethd1ca06a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 4e:9e:93:a0:11:c4 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4c9e:93ff:fea0:11c4/64 scope link 
       valid_lft forever preferred_lft forever
#复制一个终端查看宿主机的网络信息
[root@docker ~]# ip a     #可以看到使用host网络的容器,网络信息和宿主机相同
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:30:54:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.202/24 brd 192.168.100.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::34f4:cad:16ae:5b4d/64 scope link 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:30:54:96 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.146/24 brd 192.168.8.255 scope global dynamic ens34
       valid_lft 84570sec preferred_lft 84570sec
    inet6 fe80::e6e9:552d:5efd:87ac/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:a8:3c:15:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:a8ff:fe3c:15ee/64 scope link 
       valid_lft forever preferred_lft forever
6: veth1faa93d@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 5e:52:59:44:18:ad brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::5c52:59ff:fe44:18ad/64 scope link 
       valid_lft forever preferred_lft forever
8: vethd1ca06a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 4e:9e:93:a0:11:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::4c9e:93ff:fea0:11c4/64 scope link 
       valid_lft forever preferred_lft forever


五、自定义网络


  • Docker除了提供三种默认的网络模式之外,也允许用户针对一些特殊的应用场景去创建一些自定义的网络模式


  • 使用自定义网络的容器会被单独隔离出来,并且容器之间可以互相通信,而没有使用相同自定义网络的容器是不能直接访问他们的,可以通过添加相同的自定义网络进行通信


  • 一个容器可以属于多个网络,并且同一个自定义网络下的容器可以通过各自的容器名访问到对方,这是因为docker内嵌了一个dns的功能


  • Docker提供的三种自定义网络驱动:


bridge


overlay

macvlan


  • 自定义网络架构图


从下面的图可以看出,想要和不同网络的容器通信,只需要加一个网络即可

50966e7fa9aa497bb9246aadc24896e5.png


(1)自定义bridge网络


******(1)创建自定义网络
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
80abc22e3804        none                null                local
[root@docker ~]# docker network create --driver bridge my   #--driver用来定义使用的网络驱动
f2309a5c3d2093e12a9fd2a294624e5cde022e51350d4ef3e9217a23df05832c
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
80abc22e3804        none                null                local
[root@docker ~]# ip a   #在删除所有容器后,可以看到宿主机也加了一块网卡
。。。。。。
9: br-f2309a5c3d20: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:c1:cb:32:45 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global br-f2309a5c3d20
       valid_lft forever preferred_lft forever
[root@docker ~]# docker network create --driver bridge my2  #再创建一个网络模式
2e29454a0894ade347dac9f3997e8a3ad0fd644f5abe0408276a102775054a7c
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
2e29454a0894        my2                 bridge              local
80abc22e3804        none                null                local
[root@docker ~]# ip a     #可以看到又加了一块网卡
。。。。。。
10: br-2e29454a0894: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:ad:6e:14:0d brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2e29454a0894
       valid_lft forever preferred_lft forever
******(2)使用自定义网络创建容器
#复制两个终端分别开启两个容器
[root@docker ~]# docker run -it --net my --name web httpd:latest /bin/bash
root@05c67e2b1274:/usr/local/apache2# 
[root@docker ~]# docker run -it --net my --name test busybox:latest  #创建使用my自定义网络的容器
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0    #因为my使用的是bridge网络驱动,所以会分配ip
       valid_lft forever preferred_lft forever
#切换终端,查看容器运行状态
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
8e74a880ef0d        busybox:latest      "sh"                About a minute ago   Up About a minute                                   test
05c67e2b1274        httpd:latest        "/bin/bash"         7 seconds ago       Up 6 seconds        80/tcp              web

(2)通过指定子网和网关的方式创建自定义网络

******(1)创建一个新的自定义网络my3
[root@docker ~]# docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my3 
966861dba60a47eb7abb1d6a02e147c15af8af3c9b0b41840c80b1ee9a50c3c3
[root@docker ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
2e29454a0894        my2                 bridge              local
966861dba60a        my3                 bridge              local
80abc22e3804        none                null                local
[root@docker ~]# docker network inspect my3
。。。。。。
            "Config": [
                {
                    "Subnet": "172.22.16.0/24",
                    "Gateway": "172.22.16.1"
                }
            ]
        },
。。。。。。
******(2)创建一个新容器使用自定义网络my3
[root@docker ~]# docker run -it --net my3 busybox:latest
/ # ip a    #查看网络信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.2/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
#切换另一个终端查看容器的详细信息  
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
6a4487b801c4        busybox:latest      "sh"                About a minute ago   Up About a minute                                   hungry_cerf
8e74a880ef0d        busybox:latest      "sh"                9 minutes ago        Exited (0) About a minute ago                       test
05c67e2b1274        httpd:latest        "/bin/bash"         11 minutes ago       Exited (0) 10 minutes ago                           web
[root@docker ~]# docker inspect 6a4487b801c4 
。。。。。。
             "Gateway": "172.22.16.1",    #可以看到网管和ip都和刚才设定的自定义网络的配置相同
                    "IPAddress": "172.22.16.2",
。。。。。。         
******(3)创建一个容器并且指定其ip
[root@docker ~]# docker rm $(docker ps -aq)
6a4487b801c4
8e74a880ef0d
05c67e2b1274
[root@docker ~]# docker run -it --net my3 --name test --ip=172.22.16.33 busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:21 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.33/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
#切换回另一个终端
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
084db6cf7491        busybox:latest      "sh"                34 seconds ago      Up 33 seconds                           test
[root@docker ~]# docker inspect 084db6cf7491
。。。。。。
                    "Gateway": "172.22.16.1",
                    "IPAddress": "172.22.16.33",
。。。。。。                    

(3)使用自定义网络和其他网络进行通信

******(1)清楚所有容器
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
084db6cf7491        busybox:latest      "sh"                4 minutes ago       Up 4 minutes                            test
[root@docker ~]# docker stop $(docker ps -aq)
084db6cf7491
[root@docker ~]# docker rm $(docker ps -aq)
084db6cf7491
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
******(2)创建三个容器,分别是使用默认网络bridge的容器,使用my自定义网络的容器,还有使用my3自定义网络的容器,最终的目的是实现my自定义网络可以和另外两个容器进行通信,而其他两个容器互相不能通信
#创建使用默认网络bridge的容器
[root@docker ~]# docker run -it --name bridge busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0
       valid_lft forever preferred_lft forever
#创建使用my自定义网络的容器
[root@docker ~]# docker run -it --net my --name my busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#创建使用my3自定义网络的容器
[root@docker ~]# docker run -it --net my3 --name my3 busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.2/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
******(3)想要让my自定义网络的容器可以与默认网络容器以及my3网络容器通信的话,只需要把my网络容器添加另外两个容器的网卡即可
#先使用my网络容器去ping另外两个容器,发现都无法ping通
/ # ping 192.168.200.2             
PING 192.168.200.2 (192.168.200.2): 56 data bytes
^C
--- 192.168.200.2 ping statistics ---
23 packets transmitted, 0 packets received, 100% packet loss
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
^C
--- 172.22.16.2 ping statistics ---
8 packets transmitted, 0 packets received, 100% packet loss
#添加网卡
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
08d19eaa9a88        busybox:latest      "sh"                4 minutes ago       Up 4 minutes                            my3
0978d9da8119        busybox:latest      "sh"                5 minutes ago       Up 5 minutes                            my
35718e6eff5f        busybox:latest      "sh"                5 minutes ago       Up 5 minutes                            bridge
[root@docker ~]# docker network connect my3 0978d9da8119   #把my3网卡添加到my容器,后面写容器id
[root@docker ~]# docker network connect bridge 0978d9da8119  #把默认网卡添加到my容器
#重新在my网络的容器中进行ping,发现可以正常通信
/ # ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2): 56 data bytes
64 bytes from 192.168.200.2: seq=0 ttl=64 time=0.132 ms
64 bytes from 192.168.200.2: seq=1 ttl=64 time=0.078 ms
^C
--- 192.168.200.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.078/0.105/0.132 ms
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
64 bytes from 172.22.16.2: seq=0 ttl=64 time=0.134 ms
64 bytes from 172.22.16.2: seq=1 ttl=64 time=0.044 ms
^C
--- 172.22.16.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.044/0.089/0.134 ms
******(4)如果不想让my网络容器可以与my3网络容器进行通信的话,可以把my网络容器的my3网卡删除
[root@docker ~]# docker network disconnect my3 0978d9da8119
#切换到my网络容器进行ping,发现无法通信了,但是bridge网络容器可以正常通信
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
^C
--- 172.22.16.2 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
/ # ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2): 56 data bytes
64 bytes from 192.168.200.2: seq=0 ttl=64 time=0.114 ms
64 bytes from 192.168.200.2: seq=1 ttl=64 time=0.047 ms
64 bytes from 192.168.200.2: seq=2 ttl=64 time=0.056 ms
^C
--- 192.168.200.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.047/0.072/0.114 ms


目录
相关文章
|
1月前
|
存储 测试技术 数据安全/隐私保护
【Docker项目实战】使用Docker部署DailyTxT加密日记网络应用程序
【4月更文挑战第6天】使用Docker部署DailyTxT加密日记网络应用程序
53 1
|
2月前
|
应用服务中间件 nginx Docker
Docker网络管理
Docker网络管理
29 1
|
4天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
4天前
|
运维 Linux 虚拟化
Docker详解(十四)——Docker网络类型详解
Docker详解(十四)——Docker网络类型详解
17 0
|
5天前
|
Kubernetes Docker 容器
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
【5月更文挑战第7天】本文介绍了Docker的四种网络类型:Bridge(默认,每个容器连接虚拟桥)、Host(容器共享宿主机网络命名空间)、Overlay(跨宿主机通信,适合集群环境)和Macvlan(容器直接连接物理网络)。Bridge网络适用于同主机通信,而Overlay适合多主机集群。Host网络缺乏隔离,Macvlan则让容器直接连到外部网络。理解这些网络类型有助于优化Docker容器的网络配置。
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
|
21天前
|
运维 前端开发 Devops
云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
监控 安全 Docker
《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)
《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)
30 0
|
1月前
|
NoSQL 应用服务中间件 Linux
docker网络
docker网络
|
2月前
|
负载均衡 算法 应用服务中间件
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
177 0
|
2月前
|
关系型数据库 MySQL 数据库
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
82 0