linux下 docker 容器网络模式核心是 bridge(默认隔离,适合单机多容器)、host(零隔离、性能优先)、none(完全隔离)、macvlan/ipvlan(直连物理网络),选型需据通信需求、安全与性能权衡。

Linux 下创建 Docker 容器网络,核心是理解不同网络模式的隔离逻辑与适用场景,而不是盲目套用命令。选对模式,才能让容器既通又安全。
bridge 模式:默认隔离,适合单机多容器通信
docker 安装 后自动创建 docker0 网桥,所有用 –network bridge(默认)启动的容器都会接入这个二层网络,获得独立 IP(如 172.17.0.0/16 段),彼此可互通,但和宿主机网络隔离。 端口 需显式映射(-p 8080:80)才能从外部访问。
- 自定义 bridge 更可控:用 docker network create –subnet=192.168.100.0/24 mynet 建私有网段,避免 IP 冲突
- 容器加入时指定:docker run –network mynet nginx
- 不推荐在生产环境直接用默认 docker0,尤其当宿主机已用 172.17.x.x 网段时
host 模式:零网络隔离,性能优先场景用
容器直接复用宿主机的网络 命名空间 ——没有独立 IP,netstat、ss 看到的 端口 就是容器暴露的端口。省去 NAT 开销,延迟更低,但丧失网络隔离性,多个容器不能同时监听同一端口。
- 适用于性能敏感且无端口冲突的服务,比如监控采集器、日志代理
- 启动命令:docker run –network host nginx
- 注意:systemd 服务或安全策略(如 SELinux)可能限制 host 模式启用
none 模式:彻底隔离,仅用于离线计算或调试
容器只有 lo 回环 接口 ,无任何网络设备。适合不需要联网的批处理任务、安全沙箱或排查 网络问题 时排除干扰。
- 启动后进入容器:docker exec -it 容器 ID ip a,只会看到 lo
- 若后续需要联网,只能停掉重建,不能热加网络
- 配合 –read-only 和–cap-drop=ALL可构建高隔离执行环境
macvlan/ipvlan:让容器拥有“真实”局域网 IP
绕过 docker0,将容器直连物理网络,分配和宿主机同网段的 IP(如 192.168.1.100),像一台真实机器。适用于需被局域网其他设备直接访问、或对接传统网络策略(ACL、DHCP 绑定)的场景。
- macvlan 要求物理网卡支持混杂模式,且交换机允许 MAC 地址漂移(或配置静态 MAC 绑定)
- 创建示例:docker network create -d macvlan –subnet=192.168.1.0/24 —gateway=192.168.1.1 -o parent=eth0 macnet
- ipvlan 比 macvlan 更轻量,共享 MAC 但隔离 IP,适合大规模部署
基本上就这些。网络模式不是越复杂越好,关键是看服务要不要被外部发现、是否与其他容器高频通信、有没有安全合规约束。动手前先画个简图:容器要和谁说话?谁又能主动找它?想清楚这点,模式自然就定了。