docker network
1 macvlan
给容器分配与局域网同网段的 IP,并直接被局域网其他设备访问(无需端口映射)。
绕过默认 Linux bridge + NAT 的路径,网络行为更接近 “直连网卡” ,通常延迟更低、吞吐更高(接近物理网络)。
适合传统应用迁移、需要“在 LAN 内被当成独立设备”的服务(例如某些需要广播/组播发现、或对端口占用敏感的服务)。
2 bridge(默认 docker0)
地址与可达性:bridge 下容器通常在私有网段,通过端口映射对外;macvlan 下容器直接在物理网段,有独立 IP、无需端口映射。
性能路径:bridge 常经由 bridge 转发与 iptables/NAT;macvlan 不走 NAT,直接二层出入父接口,因此开销更小、延迟更低的描述更常见。
运维与安全:bridge 把容器藏在主机后面更“收敛”;macvlan 把容器暴露到物理网络里,等同新增了一台台 LAN 主机,需要你按“真实主机”去做 DHCP/IP 规划、ACL/防火墙策略与资产管理。
3 host(共享主机网络栈)
隔离与端口:host 模式容器与宿主机共享 IP、端口空间,容易端口冲突;macvlan 给容器独立 IP/端口空间,冲突少。
网络身份:host 对外仍是“宿主机那台设备”;macvlan 对外是“多台设备”(每个容器一个 MAC/IP)
相关指令
1) 查看(Docker 网络)
-
列出所有 Docker 网络:
docker network ls
2) 新增(创建网络 + 给容器加“网卡”)
-
创建一个新的 bridge 网络(最常用):
docker network create <net_name> -
创建自定义网段的 bridge 网络:
docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net -
给“正在运行的容器”新增一张网卡(把容器接入另一个网络):
docker network connect <net_name> <container_name_or_id>
3) 删除(断开容器网卡 / 删除网络)
-
从容器上移除一张网卡(把容器从某网络断开):
docker network disconnect <net_name> <container_name_or_id> -
删除一个或多个 Docker 网络:
docker network rm <net_name_or_id> [more...] -
清理所有“未使用”的网络:
docker network prune -f
4) 查看/删除宿主机虚拟网卡(docker0、br-xxxx)
-
宿主机上看到的
br-xxxx网桥通常是 Docker 创建的;可用docker network ls/docker network inspect去对应确认。 -
如果你要在宿主机层面手动删除某个网桥(例如
br-59ec...):ifconfig br-59ec53121ef6 down brctl delbr br-59ec53121ef6