前言

通过Namespace隔离、CGroup资源限制,容器拥有独立运行环境,
但想要实现容器和外部通信,就必须依靠Docker网络。

问答题

1.Docker 网络模式有哪几种,各自适用哪些场景。
答:
1、Host主机模式:容器用宿主机的网络线,不进行网络隔离
适用于对网络性能要求高的
2、Container模式:多个容器共享同一个网线
适用于需要紧密协作的容器组
3、None模式:容器不配置网
适用于本地数据测试或安全性要求高的
4、Bridge模式:Docker默认的
适用于大多数需要容器与宿主机或其他容器通信的场景,通过端口映射,容器内的服务可被外部网络访问

2.请详细说明 Bridge 模式下容器网络流量的转发过程。
答:
就是宿主机建了个“虚拟交换机”(docker0),所有默认启动的容器都连到这个交换机上。
每个容器会分配专属IP,docker0的IP作为容器的网关,负责转发所有流量。
容器之间通信:通过虚拟交换机直接转发,不用经过宿主机物理网卡,速度快。
容器访问外网:网关把容器IP改成宿主机公网 IP,由宿主机 “传话”,再把返回数据转给容器。
外部访问容器:需做端口映射(如 - p 8080:80),宿主机自动把外部访问 8080 端口的请求,转发到容器 80 端口。
整个过程自动完成,既隔离容器,又能灵活通信,是 Docker 最基础实用的网络模式。

一、Docker四大原生网络模式总览

Docker内置4种网络驱动模式,启动容器通过--network参数指定,默认使用bridge模式

1. bridge(桥接模式,默认)

Docker自动创建docker0网桥,每个容器生成一对veth pair虚拟网卡,一端接入容器Net Namespace,一端连接宿主机docker0网桥。
✅适用场景:绝大多数业务场景,容器之间互通、容器和宿主机互通、对外暴露端口访问。

2. host(主机模式)

容器直接共享宿主机网络命名空间,不创建独立网络栈,没有独立IP,直接复用宿主机网卡与端口。
⚠️注意:端口不能和宿主机程序冲突,无需端口映射。
✅适用场景:追求极致网络性能、需要监听大量端口,对网络延迟敏感的应用。

3. container(容器共享网络模式)

新容器复用另一个已有容器的Net Namespace,两个容器共享同一套网卡、IP、端口。
✅适用场景:配套辅助容器场景,例如日志采集、sidecar代理容器,和主容器本地互通。
启动示例:docker run --network container:<目标容器ID>

4. none(无网络模式)

为容器创建独立Net Namespace,但不配置任何网卡,只有lo回环网卡,无法和任何设备通信。
✅适用场景:完全隔离、不需要网络访问的离线任务容器,安全隔离要求极高。

二、Bridge模式基础架构:docker0 + veth pair

宿主机启动Docker后,自动生成虚拟网桥docker0(默认网段172.17.0.0/16)。
每启动一个bridge模式容器:
1. 创建一组veth pair虚拟网卡(虚拟网线,两端互通);
2. 一端放到容器网络命名空间内,命名为eth0
3. 另一端留在宿主机,挂载到docker0网桥;
4. 容器eth0分配网桥网段内独立IP。

三、Bridge模式端口映射底层原理(-p 参数)

执行docker run -p 宿主机端口:容器端口实现外部访问容器,底层依靠Linux iptables NAT规则实现流量转发。
Docker自动在宿主机iptables增加两类规则:
- nat表:负责IP地址转换(DNAT、SNAT)
- filter表:负责数据包放行/拦截(FORWARD链)

四、Bridge模式数据包完整转发流程(外部客户端访问容器)

客户端 → 宿主机公网网卡 → 宿主机端口

  1. PREROUTING链(nat表)
    数据包到达宿主机,DNAT规则生效:将目标地址【宿主机IP:宿主机端口】改写为【容器IP:容器内部端口】。
  2. FORWARD链(filter表)
    iptables放行跨网段转发数据包,允许流量从宿主机网卡转发至docker0网桥。
  3. 数据包经由docker0网桥、veth pair,送达容器eth0网卡,进入容器应用。

容器回包响应流程:

  1. 容器返回数据包,源地址为容器IP;
  2. 数据包到达宿主机docker0网桥;
  3. POSTROUTING链(nat表)
    SNAT规则生效:把数据包源IP【容器IP】改写为宿主机IP;
  4. 数据包发送回外部客户端,客户端始终只看到宿主机IP。

五、常用查看实操命令

# 查看docker网络列表
docker network ls
# 查看bridge网络详情
docker network inspect bridge
# 查看宿主机iptables nat表规则(端口映射核心规则)
iptables -t nat -L -n
# 查看filter转发规则
iptables -L FORWARD -n
# 指定网络模式启动容器示例
# bridge模式(默认)
docker run -it --rm nginx
# host模式
docker run -it --rm --network host nginx
# none模式
docker run -it --rm --network none nginx
# container共享网络模式
docker run -it --rm --network container:xxx nginx
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐