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,适合大规模部署
基本上就这些。网络模式不是越复杂越好,关键是看服务要不要被外部发现、是否与其他容器高频通信、有没有安全合规约束。动手前先画个简图:容器要和谁说话?谁又能主动找它?想清楚这点,模式自然就定了。