docker容器网络模式有四种核心类型:bridge(默认,隔离性好、需端口映射)、host(共享宿主机网络栈、性能高但无隔离)、none(仅lo接口、完全断网)、container(复用另一容器网络命名空间);macvlan为扩展模式,可使容器获得局域网真实ip。

Docker 容器网络模式配置的核心在于按需选择驱动类型,并匹配实际网络环境。默认的 bridge 模式适合开发测试和容器间通信;若需容器与宿主机同网段、被局域网直连访问,则必须用 macvlan;追求极致性能且可牺牲隔离性时,host 模式最直接。
bridge 模式:容器间互通的基础方案
这是 Docker 启动容器时的默认行为,依赖宿主机上的 docker0 虚拟网桥(通常分配 172.17.0.0/16 子网)。它安全、隔离,但容器 IP 对外不可见,必须靠端口映射暴露服务。
- 查看当前网络:运行
docker network ls,确认bridge网络存在 - 启动容器并自动接入:不加
--network参数即可,例如docker run -d --name app nginx - 要让多个容器通过名字通信(而非 IP),应创建自定义 bridge 网络:
docker network create --driver bridge --subnet 172.20.0.0/16 mynet
再用--network mynet启动容器,Docker 内置 DNS 就能解析容器名 - 如需外部访问容器服务,必须显式映射端口,例如
-p 8080:80,访问地址为http://宿主机IP:8080
macvlan 模式:让容器拥有真实局域网 IP
这是唯一能让容器获得和宿主机同一网段 IP 的方式,适用于需要被路由器、NAS、IoT 设备等直接访问的场景(如 Web 服务、MQTT Broker)。
- 先查清宿主机物理网卡信息:
ip a找出主网卡名(如ens33)、IP(如192.168.1.20)、子网(如/24)、网关(如192.168.1.1) - 创建 macvlan 网络,关键参数必须对齐物理网络:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=ens33 my-macvlan - 启动容器时指定固定 IP(避免冲突):
docker run -d --name web --network my-macvlan --ip=192.168.1.105 nginx
此时外部设备可直接访问http://192.168.1.105,无需端口映射 - 注意:部分家用路由器默认限制多 MAC 地址接入,可能需在后台关闭「端口安全」或启用「AP 模式」
host 模式:共享宿主机网络栈
容器直接使用宿主机的网络接口和端口,无虚拟化开销,性能最高,但完全失去网络隔离——容器内监听 0.0.0.0:80 就等于宿主机监听 80,端口冲突风险高。
- 启动即生效:
docker run -d --name nginx-host --network host nginx - 容器内执行
ifconfig或ip a,看到的网络配置和宿主机完全一致 - 适合对延迟敏感、且容器服务端口可统一规划的场景(如单节点监控 Agent、日志收集器)
- 不能与其他容器共用相同端口;也不支持
--ip或-p参数
none 模式与自定义网络管理
none 模式下容器只有本地回环接口,彻底断网,常用于离线计算或安全沙箱。而日常运维中,更常用的是灵活管理已有网络:
- 将运行中的容器接入新网络:
docker network connect mynet container-name - 从某网络断开:
docker network disconnect bridge container-name - 查看某容器的网络详情:
docker inspect container-name | grep -A 10 "Networks" - 删除未使用的网络:
docker network prune(慎用,会清除所有未被容器占用的自定义网络)











