Bridge是默认模式,容器通过docker0网桥获独立IP并隔离通信;Host模式共享宿主机网络栈,零开销但无隔离;None模式禁用全部网络,仅保留lo接口。

选对网络模式,容器通信才不会卡在第一步。Bridge 是默认且最常用的选择,Host 适合性能敏感场景,None 则用于完全隔离的测试环境——三者核心区别不在功能多寡,而在网络栈是否共享、IP 是否独立、外部能否直连。
Bridge 模式:单机多容器通信的通用解法
容器启动时不加 --net 参数,默认就走 Bridge。Docker 启动时会自动创建 docker0 虚拟网桥(默认网段 172.17.0.0/16),每个容器获得独立网络命名空间和私有 IP(如 172.17.0.2),通过 veth pair 连接到 docker0。
- 容器之间可通过 IP 直接互通,比如 curl http://172.17.0.3:3000
- 容器能主动访问外网(如 apt update、curl baidu.com)
- 外部访问容器需显式端口映射,例如 -p 8080:80,否则宿主机防火墙或 iptables 会拦截
- 查看当前 Bridge 网络:docker network ls,输出中 bridge 行即为默认网络
Host 模式:零网络开销,但放弃隔离性
容器直接复用宿主机的网络命名空间,不创建独立网卡、不分配私有 IP,所有端口都绑定在宿主机 IP 上。这意味着:
- 容器内 netstat -tln 显示的监听地址就是宿主机的真实 IP 和端口
- 无需 -p 映射,容器启动时监听 80,宿主机 80 就被占用了
- 不能在同一台机器上运行多个监听相同端口的 Host 模式容器
- 适用于对延迟敏感、或需直接使用宿主机网络配置(如指定网卡、IPv6 地址)的场景
- 启动命令示例:docker run --net=host nginx
None 模式:彻底断网,仅保留基础网络设施
容器启动后只有 lo 回环接口,没有 eth0,也不连接任何网桥或路由规则。它不是“没网”,而是“主动禁用全部网络能力”。
- 适合安全扫描、离线构建、或需要手动注入网络配置的高级用例
- 无法 ping 通其他容器或外网,ip a 只显示 lo
- 启动命令:docker run --net=none alpine ip a
- 若后续想手动挂载网络,需配合 nsenter 或 CNI 工具操作网络命名空间
不复杂但容易忽略:Bridge 是起点,Host 是特例,None 是减法。实际部署中,多数服务组合(如 Nginx + PHP-FPM + MySQL)用默认 Bridge 即可;高吞吐网关类组件可考虑 Host;而 CI 构建节点或沙箱环境,None 往往比反复清理 iptables 更干净。


















