7、docker容器网络模式
docker网络
容器网络模式,bridge 桥接模式、host 模式和 none 模式,启动容器时可以使用 --net 参数指定,默认是桥接模式。
-
网络基本管理
~]# docker network ls # docker 默认网络 NETWORK ID NAME DRIVER SCOPE 066097f14e78 bridge bridge local 379b92d96bfe host host local 12c805935e1f none null local -
--net参数说明--net=bridge: 默认值,在Docker网桥docker0上为容器创建新的网络栈;--net=none: 让Docker将新容器放到隔离的网络栈中,但不进行网络配置,之后由用户自行配置;--net=container NAME or ID:与已存在的容器共享网络资源、但存在自己文件系统、进程列表和资源限制, 两者可以直接通过lo环境接口通信;--net=host: 告诉Docker不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络, 如果进一步使用了--privileged=true参数,容器甚至会允许直接配置主机的网络栈;--net=user_defined_network: 用户自行用network相关命令创建一个网络,通过这种方式将容器连接到指定的已创建网络上去;
bridge桥接模式
Bridge 桥接模式的实现步骤主要如下:
-
实现步骤
-
Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
-
Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。
-
bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。
-
虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用

服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
-
-
示例
]# docker run -d -P edf ]# brctl show <--- 当添加容器之后,会立即生成一条网卡信息 bridge name bridge id STP enabled interfaces docker0 8000.0242f9e2058f no veth0188a6f # 假设我们将容器删除,bridge信息也会立即被清理。
host网络
容器名称空间只需要 User, Mount, pid ,网络部分 UTS, PID, NET使用主机
-
实现步骤
-
host 模式是 bridge 桥接模式很好的补充。
-
采用 host 模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。
-
同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。当然,有这样的方便,肯定会损失部分其他的特性,最明显的是 Docker Container 网络环境隔离性的弱化,即容器不再拥有隔离、独立的网络栈。
-
使用 host 模式的 Docker Container 虽然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用;另外,容器内部将不再拥有所有的端口资源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网络模式容器的端口映射。

-
-
示例
]# docker run -d -P --name tomh1 -v share1:/usr/local/tomcat/webapps --net=host edf ]# docker ps PORTS: <-- 注意看这,ports是为空的,它占用的是本地宿主机的端口 NAMES: tomh1 ]# docker inspect ce8d4f|grep Pid "Pid": 14265, ]# ss -tnlp|grep 8080 <-- 直接监听在本机上 LISTEN 0 100 *:8080 users:(("java",pid=14265,fd=54))
none网络
网络环境为 none,即不为 Docker Container 任何的网络环境
-
实现步骤
-
一旦 Docker Container 采用了none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
-
none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“少即是多”在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发,这也恰巧体现了 Docker 设计理念的开放。
-
在 none 网络模式下分配固定 ip:netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。

-
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则等都是独立的,就好像进入了另外一个网络一样。
-
-
示例 - 加入到 none网络
~]# docker run -d -P --name tomcatnone1 --net none -v share1:/usr/local/tomcat/webapps edf ~]# brctl show <-- 跟host网络一样,并不会加入到桥接网络当中 bridge name bridge id STP enabled interfaces docker0 8000.0242f9e2058f no # docker network connect bridge 容器名
三种网络模式对比
来源AI
网络模式核心特点对比
| 网络模式 | 核心特点 | IP 分配 | 网络隔离性 | 性能表现 |
|---|---|---|---|---|
| bridge | 默认模式,通过虚拟网桥(docker0)实现容器间通信,依赖 NAT 与外部网络交互。 | 独立 IP(如 172.17.x.x) | 容器间默认隔离,需手动配置端口映射 | 中等(虚拟设备转发引入延迟) |
| host | 共享宿主机网络命名空间,直接使用宿主机 IP 和端口。 | 无独立 IP,复用宿主机 IP | 无隔离,与宿主机共享网络资源 | 极高(接近宿主机原生性能) |
| none | 完全禁用网络,容器无网络接口 。 | 无 IP 分配 | 完全隔离,无法与外部通信 | 无(无网络交互) |
优缺点对比
bridge模式
- 优点
- 容器间默认隔离,安全性较高;
- 支持多容器协同(如微服务架构),配置灵活 ;
- 无需额外配置,开箱即用 。
- 缺点
- 虚拟网络转发导致性能损耗,延迟较高 ;
- 容器数量多时,网络管理复杂度增加 。
Host模式
- 优点
- 性能最优,适合高并发场景(如大数据处理、高性能计算) ;
- 配置简单,无需端口映射 。
- 缺点
- 安全性低,容器直接暴露宿主机网络风险 ;
- 端口冲突风险高(多容器需手动管理端口) 。
None模式
- 优点
- 完全隔离,适合敏感数据处理或离线任务;
- 极简配置,排除网络干扰。
- 缺点
- 无法与外部通信,适用场景极窄
适用场景
| 网络模式 | 典型适用场景 | 示例场景 |
|---|---|---|
| bridge | 微服务架构、多容器协作应用、开发环境。 | 电商系统(前端、后端、数据库容器通信)。 |
| host | 高性能需求场景(如实时数据处理)、单容器应用 。 | 日志收集器、高性能 API 服务。 |
| none | 离线计算、数据加密任务、安全隔离测试。 | 本地文件处理、密码哈希计算。 |
- 性能优先:选择 host 模式(如高频网络交互场景)。
- 安全性与隔离:选择 bridge 模式(如多容器共享环境)。
- 完全离线需求:选择 none 模式(如纯本地计算任务)。
扩展-创建自定义网络
-
语法
]# docker network --help Usage: docker network COMMAND 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 # 选取的几个常用选项, 多按tab键也能补出来命令或者多help ]# docker network create --help Usage: docker network create [OPTIONS] NETWORK Options: -d, --driver string Driver to manage the Network (default "bridge") --gateway strings IPv4 or IPv6 Gateway for the master subnet --ingress Create swarm routing-mesh network --internal Restrict external access to the network --ip-range strings Allocate container ip from a sub-range --label list Set metadata on a network -o, --subnet strings Subnet in CIDR format that represents a network segment -
示例
--network network Connect a container to a network # 指定容器网络# 1、创建 类型 bridge类型的网络 ]# docker network create -d bridge --subnet '172.20.0.0/16' --gateway '172.20.0.1' mybridge # 2、查看 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 813cc879ec84 mybridge bridge local ~]# ip a 50: br-813cc879ec84: <...> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:50:e4:26:2b brd ff:ff:ff:ff:ff:ff inet 172.20.0.1/16 brd 172.20.255.255 scope global br-813cc879ec84 valid_lft forever preferred_lft forever ~]# brctl show bridge name bridge id STP enabled interfaces br-813cc879ec84 8000.024250e4262b no # 3、运行一个容器并加入mybrigde网络中,加-v是有个静态页面 ~]# docker run -d -P -v share1:/usr/local/tomcat/webapps --network=mybridge --name=tomcatmyb1 edf8233555ae # 4、如果想看到有哪些容器在该网络中可查看, 截取了一部分, 可以看到我这里搞了三个容器 ~]# docker network inspect mybridge "Name": "mybridge", "Id": "813cc879ec8454f185fb82bead816b2caf0211c6d4e1d55b843141e8bf4e5607", "Scope": "local", "Driver": "bridge", "Containers": { "6ad0cb6c463d6c0911151c2e3453bdc59e38bf7cf51489429ac2e1d218a37a73": { "Name": "tomcatmyb3", "IPv4Address": "172.20.0.4/16", }, "98d0e7b9d5e260f0bfafd8ed781f9e831dcd5d39c99c7b4c4926cf8fdde83637": { "Name": "tomcatmyb1", "IPv4Address": "172.20.0.2/16", }, "c4a6a04d1088d1bebe0be19244456661dbe46509bd45456dbef2c790fab2f2d2": { "Name": "tomcatmyb", "IPv4Address": "172.20.0.3/16", } }, # 5、查看某一台的容器信息
更多推荐


所有评论(0)