如何配置Docker网络的Bridge模式?看这里

Posted 一一哥Sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何配置Docker网络的Bridge模式?看这里相关的知识,希望对你有一定的参考价值。

最近有几个已经就业的小伙伴,过来问壹哥关于Docker网络配置的问题,他们在实际开发中还是有些疑问。其实关于Docker网络这一块的内容确实很多,为了让大家搞清楚这个问题,壹哥准备搞几篇系列文章,来为各位小伙伴解惑。这次壹哥带来的是Docker网络的Bridge模式,接下来我们直接上干货!!!

Docker容器和服务之所以强大的原因之一,是可以将它们连接在一起,或者将它们连接到非Docker的工作负载上。而Docker容器和服务甚至都不需要知道它们部署在Docker容器上。无论Docker主机是运行在Linux、window上,或者两者混合运行,都可以使用Docker以与平台无关的方式来管理它们。

而这一切的基础,都是缘于Docker网络提供的强大功能和良好设计!

一. 操作环境

我们先说一下运行所需要的环境,如下:

centos 7.x版本
docker版本:Docker version 20.10.18, build b40c2f6
xshell 7

二. Docker network常用命令

我们先来看看Docket中提供的常用network命令。

  1. 查看docker network帮助手册

[root@hecs-215393 ~]# docker network --help  # 查看docker network 帮助手册

Usage:  docker network COMMAND

Manage networks

Commands:
  # 通过网络连接容器
  connect     Connect a container to a network
  # 创建一个网络连接
  create      Create a network
  # 关闭容器连接
  disconnect  Disconnect a container from a network
  # 显示一个或多个网络上的详细信息
  inspect     Display detailed information on one or more networks
  # 列出所有网络
  ls          List networks
  # 删除所有未使用的网络
  prune       Remove all unused networks
  # 删除一个或者多个网络
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
[root@hecs-215393 ~]# 
  1. 列出docker网络

[root@hecs-215393 ~]# docker network ls # 列出docker网络
NETWORK ID     NAME      DRIVER    SCOPE
5b15d96cf179   bridge    bridge    local
12bf219add93   host      host      local
66b6768156e6   none      null      local
[root@hecs-215393 ~]# 
  1. 通过docker network create创建一个网络

[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
# 创建一个docker网络
[root@VM-8-11-centos ~]# docker network create qf
6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279

# 再次查看一下当前的网络状态
[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
6fc2499a6dd2   qf        bridge    local
[root@VM-8-11-centos ~]# 
  1. 查看qf网络的详细信息

[root@VM-8-11-centos ~]# docker network inspect qf
[
    
        "Name": "qf",
        "Id": "6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279",
        "Created": "2022-10-09T16:41:48.505578412+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": 
            "Driver": "default",
            "Options": ,
            "Config": [
                
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                
            ]
        ,
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": 
            "Network": ""
        ,
        "ConfigOnly": false,
        "Containers": ,
        "Options": ,
        "Labels": 
    
]
[root@VM-8-11-centos ~]# 

三. Docker网络的作用

在开始学习Docker网络用法之前,我们再来了解一下Docker网络的作用,主要作用如下:

1. Docker网络可以负责容器间的相互连接和通信,以及端口映射;
2. 当容器`ip`地址发生更改时,可以通过服务名称进行网络通信,不会因为`ip`的更改导致服务不可用。

四. 网络模式

Docker的网络有以下几种网络模式。

网络模式

说明

bridge, 虚拟网桥, 默认模式

每一个容器有独立的ip, 并将容器连接到docker0网桥上

host

使用宿主机的ip和端口号, 容器不会虚拟出自己的网卡、配置ip

none

有独立的network namespace,但是并未对其进行任何网络设置

container

和一个指定的容器共享ip和端口号, 不会虚拟出网卡、配置ip等操作.

1. bridge模式简介

网桥模式,是docker默认的网络模式。

1.1 案例说明

我们可以创建两台centos容器,分别进入这两台容器中查看网络情况,查看ip是否相同。

进入容器,查看各自的ip地址。

结论:通过观察可以发现,这两个centos容器的ip地址并不相同。docker服务默认会创建一个docker0网桥,它在内核层连通了其它物理或者虚拟网卡,它会将所有容器和本机放到同一个物理网络。docker默认指定了docker0接口的ip地址和子网掩码,让主机和容器之间通过互相通信。

1.2 在宿主机中查看docker0网桥

[root@VM-8-11-centos ~]# ifconfig
br-6fc2499a6dd2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        ether 02:42:4d:db:86:7e  txqueuelen 0  (Ethernet)
        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

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:51ff:fe04:52a8  prefixlen 64  scopeid 0x20<link>
        ether 02:42:51:04:52:a8  txqueuelen 0  (Ethernet)
        RX packets 38121  bytes 10882894 (10.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 37569  bytes 6650084 (6.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.8.11  netmask 255.255.252.0  broadcast 10.0.11.255
        inet6 fe80::5054:ff:fe78:5b59  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:78:5b:59  txqueuelen 1000  (Ethernet)
        RX packets 4294502  bytes 424094659 (404.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4245669  bytes 638810894 (609.2 MiB)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 11  bytes 1488 (1.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 1488 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0593288: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::6434:bff:fe38:6a0c  prefixlen 64  scopeid 0x20<link>
        ether 66:34:0b:38:6a:0c  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 698 (698.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth340b971: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::dcb5:69ff:fe5a:d5e2  prefixlen 64  scopeid 0x20<link>
        ether de:b5:69:5a:d5:e2  txqueuelen 0  (Ethernet)
        RX packets 19  bytes 1714 (1.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23  bytes 2670 (2.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0   
  • docker使用linux进行桥接,在宿主机上虚拟一个docker网桥「docker0」。docker启动一个容器会根据docker网桥的网段,分配给容器一个ip地址,称为为container-ip。

  • docker网桥是每个容器的默认网关,同一台宿主机内的容器都会接入一个网桥,这样容器之间就能通过container-ip进行通信了。

  • 当创建容器的时候,如果没有指定网络模式,默认会使用bridge,使用的就是docker0。在宿主机执行ifconfig时,可以查看到docker0或者自己创建的网络。

  • eth0, eth1… 代表网卡一,网卡二…

  • lo表示本地回环网络。

  • inet ip用来表示网卡的ip地址。

2. bridge模式详解

整个宿主机的网桥模式都是docker0,类似于一个交换机有一大堆接口,每个接口都可以称为veth。在宿主机和容器内分别创建一个虚拟接口,并让他们彼此连通「veth pair」;

每个实例内部都有一块网卡,每个接口可以称为eth0。docker0上面每个veth,匹配某个容器内部的eth0,一一配对 或 两两配对。

重要结论:将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网卡拿到分配的ip,此时两个容器的网络是互通的。

2.1 验证案例

接下来我们再启动两台centos容器,在宿主机当中查看网络在情况。

  • 进入mycentos01容器。

  • 进入mycentos02容器。

  • 宿主机eth0, docker0与容器内eth0之间的对应关系。

  • 完整图示:

2.2 bridge使用的正确姿势

# 启动容器的时候,显示的指定为bridge模式
--network bridge或者--network=bridge

五. 总结

各位小伙伴,今天壹哥为大家带来的birdge模式就是这些内容了,是不是很容易理解呢?

docker网络作为整个docker体系中极为重要的一个知识点,在生产中经常被用到,尤其是网络模式当中的bridge模式和host模式更是应该重点掌握。
自定义网络,可以通过服务名称「容器名称」进行容器间的通信。自动处理了容器名称与ip地址的映射关系,这样使得容器间通信更为可靠和容易。

至于其他模式,如果各位小伙伴想要了解,敬请继续期待壹哥本系列的其他文章哦。

透过现象看本质——docker的网络模式一边排障一边配置docker自定义网络(bridge模式)

透过现象看本质——docker的4种网络模式、一边排障一边配置docker自定义网络

前言

? 上篇文章讲述了有关docker的资源控制,主要是三个方面:CPU、内存以及IO。本文将讲述docker的4中网络模式。

一、简述VMware中三种网络模式

? 可能,对于许多接触Linux操作系统的朋友而言,起初都是通过虚拟机软件进行层层深入的学习。而对于其中一种软件——VMware软件的网络连接可能就是初学者的一个难题。可能一直都并不了解所提供的三种网络模式的原理和意义。那么本小节将简单讲述一下有关VMware的三种网络模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。而此三种分别对应于网卡设备中的VMnet0、VMnet1(或者后期新增创建的)、VMnet8(NAT网卡也只能有一个)

1.1桥接模式

? 概念:桥接模式就是一种将主机(好比是你的笔记本上的)的网卡与虚拟机的网卡利用虚拟网桥进行通信。

? 原理理解:对这种模式的理解可以认为是将物理机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,当然物理机也一样需要连接到这个交换机,也就是说桥接模式下的所有网卡都是交换模式,相互可以访问而且互不干扰。

? 典型特征:虚拟机的IP地址需要与主机在同一网段,如果需要联网则网关与DNS需要与主机网卡一致。

? 具体可以再通过下面的图示理解:

技术图片

1.2网络地址转换模式

? NAT模式的话相对来说应该是最熟悉的了。网络地址转换,既然有地址转换,肯定是发生了转变了。NAT模式就比较适合于IP资源紧缺,而且希望虚拟机可以联网的情况。

? NAT模式借助的是虚拟的NAT设备以及虚拟的DHCP服务器,从而使得虚拟机可以联网。如下图所示:

技术图片

1.3仅主机模式

? 仅主机模式呢,其实说白了就是没有NAT设备的网络模式,仅使用的是VMnet1虚拟网卡与虚拟交换机连接,从而与虚拟机通信,而这种模式就实现了虚拟机与外网的隔离,即独立的一台服务器,只与主机互相通信。如下图所示:

技术图片

? 好的,现在大概了解了VMware中三种网络模式的原理了吧,现在继续来聊聊在docker中的网络模式。

二、docker的网络模式

2.1docker网络实现原理

? docker使用Linux桥接的方式,即在宿主机虚拟一个docker容器网桥(docker0),docker启动一个 容器时会根据docker网桥的网段分配给容器一个IP地址,这个地址就是容器ip,同时docker就是每个容器的默认网关。因此,同一个宿主机内的容器就可以通过容器ip地址直接通信。

? 一般情况下,我们在安装和启动docker服务之后使用ifconfig命令即可查看到这个docker0的虚拟网桥设备:

[root@localhost ~]# ifconfig | head -7
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:58:71:c9:ba  txqueuelen 0  (Ethernet)
        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

从上面显示的结果来看,默认的容器网关地址为172.17.0.1/16哈!当然loopback网卡是回环网卡,测试验证(TCP/IP连接),virtual bridge则是虚拟网桥(想想KVM【云原生】)

? 当然,docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法通过ip地址直接寻址的,这就表明我们需要通过其他的方式来使外部网络可以访问容器,一般会通过访问宿主机ip结合容器的端口(并且端口一般是进行了端口映射,之后会讲述)进行容器的访问。

2.2docker四种网络模式

下面直接通过下面的表格来区分理解一下docker的四种网络模式

docker网络模式 配置 说明
host 容器和宿主机共享Network namespace
container模式 容器和另外一个容器共享Network namespace
none模式 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等
bridge模式 默认的模式

其实启动docker服务之后,可以使用docker network相关命令控制管理网络,下面我们查看一下网络列表:(默认存在下面三个)下面逐一介绍(结合第一小节的内容来理解docker 中的网络原理)

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
3763f78eb404        bridge              bridge              local
3bb2f50eb211        host                host                local
e12cd7b98c54        none                null                local

2.2.1host模式

host模式结合VMware中的仅主机模式即可理解,通过下图表示一下:

技术图片

从上图可以看出,如果在启动容器后使用的是host模式,那么这个容器将不会获得一个独立的Network Namespace(网络命名空间),而是和宿主机系统共用一个Network Namespace。并且这就意味着容器将不会虚拟出自己的网卡以及配置自己的ip等,而是使用宿主机的ip以及端口。不过呢,在其他方面例如文件系统等还是与之隔离的。

这种方式最大优势在于网络性能比较好但是缺点也很明显——网络的隔离性很弱。

2.2.2container模式

? 这个模式正如上述表格中的说明一般,是表示指定新创建的容器和已经存在的一个容器共享一个Network Namespace。当然这也表示新建的这个容器不会创建自己的网卡等相关操作,而是和与指定的容器共享这些资源。

? 这种模式也和上述的host差不多,除了网络方面,其文件系统、进程列表等都是隔离的。

参照下图:

技术图片

2.2.3none模式

? 使用none模式,Docker容器拥有自己的Network Namespace,但是,不会对Docker容器进行任何的网络配置。这就表明这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。这种方式网络的隔离性最为彻底,即表明关闭了容器的网络功能,也无法访问这个容器。

示意图如下:

技术图片

2.2.4bridge模式

? 该模式就是我们在启动docker服务后默认的docker网络模式,其会在主机上创建一个名为docker0的虚拟网桥,这个主机上的所有启动的容器就会连接到这个虚拟网桥上。结合VMware中网桥模式原理,想想物理交换机的原理,就不难理解了。

? 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中(这个veth对我们在OpenStack中见过,笔者觉得可以将之理解为一个桥梁,建立桥两岸的关系而存在的一种虚拟设备),并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

? 使用docker run -p 命令时,docker实际是在防火墙做了DNAT规则,实现端口转发的功能。

下面通过一个节点的服务器结构图来理解:

技术图片

当然,这四种模式都不需要手动配置,真正需要配置的是自定义网络。

三、docker网络控制相关命令配置

上面已经给出了对应docker网络控制的命令docker network,下面具体看一下这个命令的具体说明:

docker network的命令用法:
Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

3.1桥接命令设置

我们通过尝试、排错和验证的方式来配置docker网络。

因为需要NAT地址转换功能,所以需要开启防火墙,但是核心防护还是关了吧。

[root@localhost ~]# systemctl start firewalld.service 
[root@localhost ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since 一 2020-04-06 10:18:40 CST; 2s ago
     Docs: man:firewalld(1)
 Main PID: 65611 (firewalld)
...

初始化环境:(后面会返回到这个环境状态)

[root@localhost ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

我们尝试通过docker网桥方式(桥接)给一个容器设置一个ip地址(自定义的),下面看一下命令执行的结果:

[root@localhost ~]# docker run -itd --name test --network bridge --ip 172.17.0.10 centos:7 /bin/bash
Unable to find image ‘centos:7‘ locally
7: Pulling from library/centos
ab5ef0e58194: Pull complete 
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
29f9e9cbb398085d7c89bed2982d626bfb7e564371a76a6cb693cffa68b917af
docker: Error response from daemon: user specified IP address is supported on user defined networks only.

首先,由于没有改镜像,所以会先拉取镜像之后创建以及尝试运行容器,但是会遇到报错,报错原因是因为用户自己设置的ip地址只适合于他们自己定义的网络。但是这并不影响镜像的获取与创建,我们尝试运行看看结果:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   5e35e350aded        4 months ago        203MB
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
29f9e9cbb398        centos:7            "/bin/bash"         About a minute ago   Created                                 test
[root@localhost ~]# docker start 29f9e9cbb398
Error response from daemon: user specified IP address is supported on user defined networks only
Error: failed to start containers: 29f9e9cbb398

? 很显然,结果告诉我们还是上述的原因导致了这个问题,好吧只能删除这个容器了。索性还原为初始化环境吧(其实可以去掉--network bridge就不会报错,但是设置的ip地址会不生效,可以自行尝试一下),我们不指定ip地址来试一下,顺便验证一下不加这个参数试试,最后还原为初始化状态后我们再通过自定义的方式来设置ip地址吧。

[root@localhost ~]# docker run -itd --name demo centos:7 /bin/bash
984545df8ebf2c30f4ccf3f5f4699ed67bd2a93cbc068f2ace4865a828b4a4d1
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
984545df8ebf        centos:7            "/bin/bash"         8 seconds ago       Up 6 seconds                            demo

进入容器查看ip地址


[root@localhost ~]# docker exec -it 984545df8ebf /bin/bash
[root@984545df8ebf /]# yum install -y net-tools
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
[root@984545df8ebf /]# 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 2201  bytes 15042254 (14.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1999  bytes 111171 (108.5 KiB)
        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

那么首先我们需要创建一个自定义的子网段,并且给他一个名称,通过这个网段给对应的容器设置固定的ip地址。

[root@localhost ~]# docker network create --subnet=172.18.0.0/24 mynetwork
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-4cd28c051bec -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

看来很不幸啊,又error了,不要慌,我们看看是什么原因导致的,这个报错的根源看似是防火墙,说是无法跳过DNAT(目标网络地址转换)规则,其实导致这个问题的原因是我们刚刚开启了防火墙,却没有重启docker服务,就有点类似更改了配置文件没有重启服务。

[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker network create --subnet=172.18.0.0/24 mynetwork
723d0fd514eb219d57667f72c3eb75fc4864af0cd94c21b6c70e868fb8d520a1
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
00008a1e778b        bridge              bridge              local
3bb2f50eb211        host                host                local
723d0fd514eb        mynetwork           bridge              local
e12cd7b98c54        none                null                local
[root@localhost ~]# 

此时进行验证自定义设置一个容器的固定IP地址的测试:

[root@localhost ~]# docker run -itd --name test2 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash
Unable to find image ‘centos:7‘ locally
7: Pulling from library/centos
ab5ef0e58194: Pull complete 
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
683ad76f7789b5c16f251577047a288a3a4a00777128a216adfee15985b94c04

查看容器的状态,进入容器查看ip地址

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
683ad76f7789        centos:7            "/bin/bash"         23 seconds ago      Up 22 seconds                           test2
[root@localhost ~]# docker exec -it 683ad76f7789 /bin/bash
[root@683ad76f7789 /]# yum install -y net-tools
Loaded plugins: fastestmirror, ovl
...
[root@683ad76f7789 /]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.10  netmask 255.255.255.0  broadcast 172.18.0.255
        ether 02:42:ac:12:00:0a  txqueuelen 0  (Ethernet)
        RX packets 2302  bytes 15050471 (14.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2049  bytes 113777 (111.1 KiB)
        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 62  bytes 7019 (6.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 62  bytes 7019 (6.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此时发现自定义的网络设置容器ip地址成功了。

四、总结

? 本文通过对VMware软件中的三种网络模式工作的原理,层层递进深入讲解docker的各种网络模式,并且通过案例结合排障思路详细介绍了有关docker网桥模式是如何配置容器ip地址的,有默认模式以及自定义模式。

? 最后,需要注意的是命令还是需要多记多敲多练,谢谢阅读!

以上是关于如何配置Docker网络的Bridge模式?看这里的主要内容,如果未能解决你的问题,请参考以下文章

Docker——网络配置

Docker网络配置

Docker的bridge和macvlan两种网络模式

Docker网络配置

Docker6种网络配置详解,网络模式应该这么选

网络配置