Docker 的四种网络模式
Docker 提供四种核心网络模式,分别适用于不同容器通信与隔离需求,运行容器时可通过 --net 指定网络模式,以下是四种网络模式的讲解与示例:
1、Bridge(桥接模式)
- 默认模式,Docker 为容器分配独立虚拟网卡并接入 docker0 网桥
- 容器间通过 Docker 网络通信,与外部网络隔离
- 适用场景:常规应用隔离部署,需端口映射 (-p) 暴露服务
2、Host(主机模式)
- 容器直接共享宿主机网络命名空间,无独立网络栈
- 性能最佳(无 NAT 转换),但会占用宿主机端口(可能冲突)
- 适用场景:网络密集型应用(如负载均衡器),需避免端口转发开销
示例:指定 docker 网络模式为host模式,容器将直接使用宿主机的网络和端口。
# docker run -itd --name busybox-1 --net=host busybox
# docker exec -it busybox-1 ip a
lo:
eth0:
3、Container(容器共享模式)
- 新容器共享指定容器的网络命名空间(如 --net=container:<ID>)
- 容器间可通过 localhost 直接通信,无需暴露端口
- 适用场景:依赖紧密的容器组(如日志收集器与应用容器)
示例:指定 docker 网络模式为 container 模式,该容器会与其他容器共用网络和ip。
# docker run -itd --name busybox-1 --net=container:jenkins busybox
db77cfc262eb74d5995bc8ab8e9bcff06cc9a7276aca0da71f8379e56be7cd25
# docker exec -it busybox-1 ip a
lo:
eth0@if19:
4、None(无网络模式)
- 不配置任何网络接口,容器完全隔离
- 需手动自定义网络栈(如通过 nsenter 命令)
- 适用场景:安全性要求极高的任务或特殊网络调试
示例:指定 docker 网络模式为 none 模式,容器没有网卡,没有IP地址。
# docker run -itd --name busybox-1 --net=none busybox
# docker exec -it busybox-1 ip a
lo: