云原生Docker 网络模式详解容器间网络通信

Posted 鹤冲天Pro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生Docker 网络模式详解容器间网络通信相关的知识,希望对你有一定的参考价值。

当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,也有着很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。因此,我们有必要深入了解 Docker 的网络知识,以满足更高的网络需求。

一、默认网络

安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看。

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
688d1970f72e        bridge              bridge              local
885da101da7d        host                host                local
f4f1b3cf1b7f        none                null                local

在学习 Docker 网络之前,我们有必要先来了解一下这几种网络模式都是什么意思。

网络模式网络模式
网络模式为每一个容器分配、设置 IP 等,并将容器连接到一个 docker0 虚拟网桥,默认为该模式。
host容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。
none容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,IP 等。
container新创建的容器不会创建自己的网卡和配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。

1、bridge 网络模式

在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。
  默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。
  比如我运行一个基于 busybox 镜像构建的容器 bbox01,查看 ip addr:
busybox 被称为嵌入式 Linux 的瑞士军刀,整合了很多小的 unix 下的通用功能到一个小的可执行文件中。

然后宿主机通过 ip addr 查看信息如下:

通过以上的比较可以发现,证实了之前所说的:守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名。
  同时,守护进程还会从网桥 docker0 的私有地址空间中分配一个 IP 地址和子网给该容器,并设置 docker0 的 IP 地址为容器的默认网关。也可以安装 yum install -y bridge-utils 以后,通过 brctl show 命令查看网桥信息。

对于每个容器的 IP 地址和 Gateway 信息,我们可以通过 docker inspect 容器名称|ID 进行查看,在 NetworkSettings 节点中可以看到详细信息。

我们可以通过 docker network inspect bridge 查看所有 bridge 网络模式下的容器,在 Containers 节点中可以看到容器名称。

关于 bridge 网络模式的使用,只需要在创建容器时通过参数 --net bridge 或者 --network bridge 指定即可,当然这也是创建容器默认使用的网络模式,也就是说这个参数是可以省略的。

Bridge 桥接模式的实现步骤主要如下:

  • Docker Daemon 利用 veth pair 技术,在宿主机上创建一对对等虚拟网络接口设备,假设为 veth0 和 veth1。而
    veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
  • Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0;
  • Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,宿主机的网络报文若发往 veth0,则立即会被 Container 的 eth0 接收,实现宿主机到 Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。

2、host 网络模式

  • host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定;
  • 采用 host 网络模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;
  • host 网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

比如我基于 host 网络模式创建了一个基于 busybox 镜像构建的容器 bbox02,查看 ip addr:

然后宿主机通过 ip addr 查看信息如下:

对,你没有看错,返回信息一模一样,我也可以肯定我没有截错图,不信接着往下看。我们可以通过 docker network inspect host 查看所有 host 网络模式下的容器,在 Containers 节点中可以看到容器名称。

3、none 网络模式

  • none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。在创建容器时通过参数 --net none 或者 --network none 指定;
  • none 网络模式即不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。可以说 none 模式为 Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。

比如我基于 none 网络模式创建了一个基于 busybox 镜像构建的容器 bbox03,查看 ip addr:

我们可以通过 docker network inspect none 查看所有 none 网络模式下的容器,在 Containers 节点中可以看到容器名称。
  

4、container 网络模式

  • Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;
  • 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。

Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。
  比如我基于容器 bbox01 创建了 container 网络模式的容器 bbox04,查看 ip addr:

容器 bbox01 的 ip addr 信息如下:

宿主机的 ip addr 信息如下:

通过以上测试可以发现,Docker 守护进程只创建了一对对等虚拟设备接口用于连接 bbox01 容器和宿主机,而 bbox04 容器则直接使用了 bbox01 容器的网卡信息。
  这个时候如果将 bbox01 容器停止,会发现 bbox04 容器就只剩下 lo 接口了。

然后 bbox01 容器重启以后,bbox04 容器也重启一下,就又可以获取到网卡信息了。

5、link

docker run --link 可以用来链接两个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
  这种方式官方已不推荐使用,并且在未来版本可能会被移除,所以这里不作为重点讲解,感兴趣可自行了解。
  官网警告信息:https://docs.docker.com/network/links/

二、自定义网络

虽然 Docker 提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理,以及启用容器名称到 IP 地址的自动 DNS 解析。
  从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。
  但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

1、创建网络

通过 docker network create 命令可以创建自定义网络模式,命令提示如下:

进一步查看 docker network create 命令使用详情,发现可以通过 --driver 指定网络模式且默认是 bridge 网络模式,提示如下:

创建一个基于 bridge 网络模式的自定义网络模式 custom_network,完整命令如下:

docker network create custom_network

通过 docker network ls 查看网络模式:

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b3634bbd8943        bridge              bridge              local
062082493d3a        custom_network      bridge              local
885da101da7d        host                host                local
f4f1b3cf1b7f        none                null                local

通过自定义网络模式 custom_network 创建容器:

docker run -di --name bbox05 --net custom_network busybox

通过 docker inspect 容器名称|ID 查看容器的网络信息,在 NetworkSettings 节点中可以看到详细信息。

2、连接网络

通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式。

docker network connect bridge bbox05

通过 docker inspect 容器名称|ID 再次查看容器的网络信息,多增加了默认的 bridge。
  

3、断开网络

通过 docker network disconnect 网络名称 容器名称 命令断开网络。

docker network disconnect custom_network bbox05

通过 docker inspect 容器名称|ID 再次查看容器的网络信息,发现只剩下默认的 bridge。

4、移除网络

可以通过 docker network rm 网络名称 命令移除自定义网络模式,网络模式移除成功会返回网络模式名称。

docker network rm custom_network

注意:如果通过某个自定义网络模式创建了容器,则该网络模式无法删除。

三、容器间网络通信

接下来我们通过所学的知识实现容器间的网络通信。首先明确一点,容器之间要互相通信,必须要有属于同一个网络的网卡。
  我们先创建两个基于默认的 bridge 网络模式的容器。

docker run -di --name default_bbox01 busyboxdocker run -di --name default_bbox02 busybox

通过 docker network inspect bridge 查看两容器的具体 IP 信息。

然后测试两容器间是否可以进行网络通信。

经过测试,从结果得知两个属于同一个网络的容器是可以进行网络通信的,但是 IP 地址可能是不固定的,有被更改的情况发生,那容器内所有通信的 IP 地址也需要进行更改,能否使用容器名称进行网络通信?继续测试。

经过测试,从结果得知使用容器进行网络通信是不行的,那怎么实现这个功能呢?
  从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。
  但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。
  我们先基于 bridge 网络模式创建自定义网络 custom_network,然后创建两个基于自定义网络模式的容器。

docker run -di --name custom_bbox01 --net custom_network busybox
docker run -di --name custom_bbox02 --net custom_network busybox

通过 docker network inspect custom_network 查看两容器的具体 IP 信息。

然后测试两容器间是否可以进行网络通信,分别使用具体 IP 和容器名称进行网络通信。

经过测试,从结果得知两个属于同一个自定义网络的容器是可以进行网络通信的,并且可以使用容器名称进行网络通信。
  那如果此时我希望 bridge 网络下的容器可以和 custom_network 网络下的容器进行网络又该如何操作?其实答案也非常简单:让 bridge 网络下的容器连接至新的 custom_network 网络即可。

docker network connect custom_network default_bbox01

学完容器网络通信,大家就可以练习使用多个容器完成常见应用集群的部署了。

云原生Docker09-Docker网络详解

【云原生|Docker】09-Docker网络详解

文章目录

前言

	当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker 同样有着很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。因此,我们有必要深入了解 Docker 的网络知识,以满足更高的网络需求。
	Docker网络也是docker学习中重要的一部分,前门我们说介绍的docker操作均是在单宿主机上安装和使用docker,然后再生产环境中单节点的使用是没有实际意义的,因此这一章节我们将详细介绍docker的网络使用,已经docker跨宿主机网络使用。

网络详解

​ 安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看。

[root@clinet ~]# docker network ls 
NETWORK ID     NAME      DRIVER    SCOPE
44ccbd74a658   bridge    bridge    local
016f4cda7f9a   host      host      local
6167ccead0c4   none      null      local

网络模式介绍:

  • 桥接网络(bridge network

桥接网络是Docker默认的网络模式,也是最常用的一种。在桥接网络中,Docker主机上的所有容器都连接到同一个虚拟网络中。Docker会为每个容器分配一个唯一的IP地址,容器之间可以相互通信。

  • 主机网络(host network)

主机网络模式让容器直接使用主机的网络栈,容器中的应用程序可以直接访问主机上的网络接口。这种模式的好处是容器的网络性能非常高,但是容器之间无法直接通信,因此这种模式一般只用于需要访问主机网络的应用程序。

  • none网络(none network)

none网络模式让容器没有网络接口,也没有IP地址。这种模式通常用于测试和调试,或者需要在容器中运行一些不需要网络连接的应用程序。

  • container模式

container模式,也称为容器网络模式。在这种模式下,容器可以共享另一个容器的网络栈,即两个容器可以使用同一个虚拟网络接口和IP地址。

  • 自定义

docker 1.9版本以后新增的特性,允许容器使用第三方的网络实现或者创建单独的bridge网络,提供网络隔离能力。可自定义的网络类型:bridge,overlay,macvlan。

bridge网络

​ 在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。

默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。

 容器安装后默认会创建一个docker0的网桥,网桥的默认ip段为172.17.0.1/16,我们可以通过docker的配置文件(/etc/docker/daemon.json)自定义网桥ip段。
 
 [root@clinet ~]# cat /etc/docker/daemon.json 

  "bip": "172.18.0.1/16",
  "registry-mirrors": ["https://mqkiky4e.mirror.aliyuncs.com"]

[root@clinet ~]#

我们通过创建一个busybox的容器,使用bridge网络,来深入了解brige网络的连接。

[root@clinet ~]# docker run -it --network bridge busybox /bin/sh
(--network  bridge是默认的,可以不指定。)

创建完容器之后,我们在宿主机上通过ip add查看的信息如下:

此时宿主机上创建了一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名。如上图所示,9表示为连接到容器内的网络连接(eth0@if9),

同时通过在宿主机上可以查看到相关网桥的信息:

综上所述,bridge网络的拓扑如下:

Bridge 桥接模式的实现步骤主要如下:

1. 启动一个容器的时候,Docker Daemon会在宿主机上创建一对虚拟网络接口,该接口相当于网线的两端,一端在宿主机上(veth pair格式),另外一端在容器内为eth0;
2.  同时Docker Daemon 会将宿主机上的 veth pair 接口桥接到 Docker Daemon 创建的 docker0 网桥上。
3.  docker0网桥同时也类似为dhcp,会给容器的eth0网卡分配相同段的ip。
  • 通过docker inspect 容器id来查看容器的详细信息,其中网络部分如下:
[root@clinet ~]# docker inspect 53a |grep -A 30 Networks

  • docker network inspect bridge查看网桥的详细信息。
[root@clinet ~]# docker network inspect bridge 
# 通过如下命令会列出bridge网络的相关信息,其中"Containers"字段的表示是信息是指当前节点上有哪些容器使用了该网络。

  • 使用–network 指定bridge网络
docker run -d --name web1 --net bridge nginx

基于bridge网络的容器访问外部网络

默认情况下,基于bridge网络容器即可访问外部网络,这是因为默认情况下,docker使用了iptables的snat转发来实现容器对外部的访问(需要内核开启net.ipv4.ip_forward=1)

外部网络访问基于bridge网络的容器

如果想让外界可以访问到基于bridge网络创建的容器提供的服务,则必须要告诉docker要使用的端口。

可以通过如下方法查看镜像会使用哪些端口:

docker inspect nginx | jq .[]."ContainerConfig"."ExposedPorts"

在创建容器的时候可以指定这个容器的端口与主机端口的映射关系:

docker run -d --name web -P nginx

-p: 可以指定主机与容器的端口关系,冒号左边是主机的端口,右边是映射到容器中的端口
-P:该参数会分配镜像中所有的会使用的端口,并映射到主机上的随机端口

这种端口映射基于iptables的dnat实现

查看容器的端口情况:

docker port  容器名称
或
docker  ps  -a  (找到对应容器)

host网络

  • host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定;
  • 采用 host 网络模式的 容器,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;
  • 使用host网络的主机,与宿主机共享网络地址,可以获得最好的数据转发性能。
  • 使用host网络的缺点是,同一个宿主机上的多个容器共享同一个ip地址,如果多容器使用相同的端口,需要自行解决端口冲突问题。(这也是host网络一般不使用的原因。)
  1. 可以通过如下方式查看host网络信息:
docker inspect host
  1. 创建一个使用host网络容器的示例:
# 可以看到该容器没有自己的IP地址,因为它直接使用宿主机IP地址
docker run -it --network host busybox

host网络拓扑

none网络

  • none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。在创建容器时通过参数 --net none 或者 --network none 指定;
  • 使用none网络的容器除了lo,没有其他任何网卡,完全隔离。用于既不需要访问外部服务,也不允许外部服务访问自己的应用场景。
  1. 查看none网络信息:
docker network inspect none
  1. 创建一个使用none网络容器的示例:
docker run -it --network none busybox

container网络

  • Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;
  • 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。
  • Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。

  1. 创建一个基础容器nginx,该容器使用bridge模式
[root@clinet ~]# docker run -d --name nginx --network bridge nginx 
5acd9628840da292a618b44499fdf4c6ac56f11b4c64390411ec41f7b59a8b9f
[root@clinet ~]#

此时基础容器的网络情况如下:

  1. 创建一个busybox容器,使用container网络模式
docker run -it --network container:nginx busybox

此时busybox容器的网络如下:

此时宿主机上的网络情况如下:

总上所述,Docker 守护进程只创建了一对对等虚拟设备接口,busybox容器完全的使用了nginx容器的网络。

  1. 当我们停止掉nginx容器的时候,网络信息如下:

此时busybox容器只剩下了lo网络接口。

自定义网络

Docker除了提供三种的默认网络模式之外,也允许用户针对一些特定的应用场景去创建一些自定义的网络。这样属于这个网络的容器就可以单独隔离出来,它们之间可以相互通信,而不在这个网络的容器就不能直接访问到它们。一个容器可以属于多个网络,同一个自定义网络下的容器可以通过各自的容器名访问到对方,因为会使用到docker内嵌的一个dns功能。

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

1. bridge
2. overlay
3. macvlan

自定义bridge网络

  1. 创建一个叫作my_net的自定义网络
docker network create --driver bridge my_net    #--driver用于指定网络类型,不指定默认为bridge
  1. 通过指定子网和网关的方式创建my_net2网络:
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
  1. 查看网络信息

  1. 宿主机上会产生两个类似docker0的网桥。

  1. 删除自定义网络

docker network rm my_net1 (自定义网络名称)

注意:如果通过某个自定义网络模式创建了容器,则该网络模式无法删除。

示例:

  • 使用自定义的bridge网络my_net1,创建一个busybox容器
docker run -it --network my_net1 busybox

  • 使用自定义的bridge网络my_net2,创建一个busybox容器
docker run -it --network my_net2 busybox

容器的互通

  • 这里所说的容器互通是指在同一个宿主机上的容器;
  • 容器互通必须要求互通容器在同一个网络内;

两个相同的bridge网络容器互通(默认bridge)

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_test nginx

  1. 创建另一个基于默认的 bridge 网络模式的容器,并测试连通性

经过测试,从结果得知两个属于同一个网络的容器是可以进行网络通信的。

两个相同的bridge网络容器互通(自定义bridge)

  1. 创建一个基于自定义的my_net1网络模式的容器.
docker run -d --name nginx --network my_net1 nginx

  1. 创建另一个基于my_net1网络模式的容器,并测试连通
docker run -it --name busybox --network my_net1 busybox ping 172.17.0.2

	从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。
	但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

两个不同bridge网络互通

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_1 nginx

  1. 创建一个基于自定义的my_net2网络模式的容器. 并测试互通。
docker run -it --network my_net2  busybox ping 172.18.0.3

此时网络不通。

  1. 通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式。
docker network connect my_net2 nginx_1

  1. 测试网络连通性

  1. 此时两个网络结果如下:

此时相当于nginx_1容器存在两个网卡,一个是桥接到docker0的,一个是桥接到my_net2的,因此实现原理还是两容器处于相同的ip段。

  1. 断开网络
docker network disconnect my_net2 nginx_1
1.  上述所说的容器互通均是同一宿主机上的场景;
2.  互通的根本原理是让两个容器处于同一个桥接网卡上,即:相同的ip段。

后面我们将单独说说跨主机容器互通的问题。

Docker network命令

  1. 创建一个新的Docker网络
docker network create my_network

语法如下:

docker network create [OPTIONS] NETWORK
其中,OPTIONS是一些可选参数,NETWORK是要创建的网络的名称。
下面是一些常用的OPTIONS参数:
--driver:指定网络驱动程序,默认为bridge。
--subnet:指定网络的IPv4子网。
--gateway:指定网络的IPv4网关。
--ipv6:启用IPv6支持。
--ip-range:指定网络的IPv4地址范围。
--ipam-driver:指定IP地址管理驱动程序。
--ipam-opt:指定IP地址管理驱动程序的选项。

1.1 创建一个名为my_network的桥接网络,其中IPv4子网为172.18.0.0/16,网关为172.18.0.1

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_network

1.2 将创建一个名为my_network的桥接网络

docker network create --driver bridge my_network
  1. 将名为my_container的容器连接到名为my_network的Docker网络
docker network connect  my_network  my_container
  1. 将名为my_container的容器从名为my_network的Docker网络中断开连接,
docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

为my_container的容器从名为my_network的Docker网络中断开连接,

docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

以上是关于云原生Docker 网络模式详解容器间网络通信的主要内容,如果未能解决你的问题,请参考以下文章

云原生Docker09-Docker网络详解

Docker 网络详解之使用自定义网络实现容器间通过容器名称互联

运维实战 容器部分 Docker网络

Docker网络详解

云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)

Docker 网络详解之使用 --link 实现容器间通过容器名称互联