Docker网络模式

本文详细介绍了Docker的四种网络模式:桥接模式(bridge)、主机模式(host)、无网络模式(none)及容器网络模式(container)。讲解了各自的工作原理、优缺点和适用场景,帮助理解Docker网络隔离与通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker原生支持四种网络模式,在创建容器时通过参数--net xxx 或者 --network xxx 指定。

网络模式

简介

bridge

为每一个容器分配、设置 IP 等,并将容器连接到一个 docker0 虚拟网桥,默认为该模式。

host

容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。

none

容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,IP 等。

container

新创建的容器不会创建自己的网卡和配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。

Bridge 桥接模式

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

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

Host 网络模式

采用 host 网络模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;

host 网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

None 网络模式

none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。

none 网络模式即不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。可以说 none 模式为 Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。

Container 网络模式

Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。

### Docker 网络模式详解及配置方法 #### 1. **Bridge 模式** 这是 Docker 默认的网络模式。当启动一个容器时,如果没有显式指定 `--network` 参数,则会自动使用 Bridge 模式[^2]。在这种模式下,Docker 守护进程会在主机上创建一个名为 `docker0` 的虚拟网桥,并为每个容器分配独立的 IP 地址和子网掩码。 - 配置方式: ```bash docker run --network=bridge <image_name> ``` 这种模式适合大多数场景下的应用部署需求,因为它提供了良好的隔离性和灵活性。 --- #### 2. **Host 模式** 在 Host 模式下,容器不会被分配单独的网络命名空间,而是共享宿主机的操作系统网络栈。这意味着容器内的服务可以直接绑定到宿主机的真实接口地址,而无需 NAT 或端口映射操作。 - 配置方式: ```bash docker run --network=host <image_name> ``` 需要注意的是,在此模式下运行的应用可能会与其他正在监听相同端口号的服务发生冲突。 --- #### 3. **None 模式** 如果希望完全屏蔽掉某个特定容器对外部世界的访问能力,可以选用 None 模式。此时除了 loopback 接口外不会再有其他任何形式的联网支持存在[^4]。 - 配置方式: ```bash docker run --network=none <image_name> ``` 用户需手动完成所有的必要设置比如添加额外物理适配器或者调整路由表项等工作才能让此类实例重新获得连通性。 --- #### 4. 自定义 Overlay/Custom Networks (User-defined networks) 为了实现更复杂的跨节点集群环境中的多台机器之间相互协作的需求, 可以考虑构建自定义overlay类型的逻辑拓扑结构来满足实际业务情况的要求[^3]. 这种高级别的抽象层允许不同主机上的多个容器彼此透明地交换数据包而不必关心底层具体的传输细节. - 创建一个新的覆盖型网络: ```bash docker network create -d overlay my_overlay_network ``` 之后就可以像平常一样把新产生的资源关联至目标镜像文件之上啦! --- ### 总结 每种 docker 网络模型都有其独特之处以及适用范围。对于简单的单机测试用途来说 bridge 已经足够强大;而对于追求极致性能表现又不想牺牲太多安全性的朋友而言 host 则是个不错的选择;最后当我们面临分布式计算框架搭建难题的时候不妨试试看 user defined ones 吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值