09、Docker 容器的网络模式

09、Docker 容器的网络模式

docker run 创建 docker 容器时,可以用–net 选项指定容器的网络模式,Docker 有以下 4 种网络模式:

  • bridge 模式:使–net =bridge 指定,默认设置;
  • host 模式:使–net =host 指定;
  • none 模式:使–net =none 指定;
  • container 模式:使用–net =container:NAME or ID 指定。

1、安装网桥管理工具:

1
2
yum install bridge-utils -y 
brctl show 可以查看到有一个 docker0 的网桥设备,下面有很多接口,每个接口都表示一个启动的docker 容器,因为我在 docker 上启动了很多容器,所以 interfaces 较多

可以给容器起一个代号,这样可以直接以代号访问,避免了容器重启 ip 变化带来的问题 –link

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND] 

例:
1.启动一个 test3 容器
docker run --name test3 -itd inter-image /bin/bash


2.启动一个 test5 容器,--link 做链接,那么当我们重新启动 test3 容器时,就算 ip 变了,也没关系,
我们可以在 test5 上 ping 别名 webtest
docker run --name test5 -itd --link=test3:webtest inter-image /bin/bash

3.test3 和 test5 的 ip 分别是 172.17.0.22 和 172.17.0.24

4.重启 test3 容器
docker restart test3
发现 ip 变成了 172.17.0.25

5.进入到 test5 容器
docker exec -it test5 /bin/bash

ping test3 容器的 ip 别名 webtest 可以 ping 通,尽管 test3 容器的 ip 变了也可以通

3、none 模式

Docker 网络 none 模式是指创建的容器没有网络地址,只有 lo 网卡

容器有自己的网络命名空间,但不做任何配置,它与宿主机、与其他容器都不连通的。

1
2
3
4
5
6
7
8
9
10
11
12
docker run -itd --name none --net=none --privileged=true centos

docker exec -it none /bin/bash


[root@05dbf3f2daaf /]# ip addr
#只有本地 lo 地址

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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

4、container 模式

简单来说,指定一个已存在的容器,复制他的网络模式。

​ Docker 网络 container 模式是指,创建新容器的时候,通过–net container 参数,指定其和已经存在的某个容器共享一个 Network Namespace。

​ Docker网络container模式是指定其和已经存在的某个容器共享一个 Network Namespace,此时这两个容器共同使用同一网卡、主机名、IP 地址,容器间通讯可直接通过本地回环 lo 接口通讯但这两个容器在其他的资源上,如文件系统、进程列表等还是隔离的

1
2
3
4
5
6
7
8
#和已经存在的 none 容器共享网络
[root@master1 ~]# docker run --name container2 --net=container:none -it --privileged=true centos

[root@05dbf3f2daaf /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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

5、 bridge 模式

​ 默认选择 bridge 的情况下,容器启动后会通过 DHCP 获取一个地址,当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建桥接网络
[root@master1~]# docker run --name bridge -it --privileged=true centos bash

[root@a131580fb605 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen
1000
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
64: eth0@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group
default
link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.13/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

4、host 模式

​ Docker 网络 host 模式是指共享宿主机的网络,相当于Vmware中的NAT模式,与宿主机在同一个网络中,但没有独立IP地址。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。可以通过 –net=host 指定使用 host 网络。

1
2
# 共享宿主机网络
[root@master1~]# docker run --name host -it --net=host --privileged=true centos bash


09、Docker 容器的网络模式
http://blog.kjiang.vip/posts/1950070038.html
作者
发布于
2025年7月25日
许可协议