docker engine 本身不支持物理网卡绑定,但可通过 macvlan 直连指定网卡、bridge+iptables snat 强制出口、或自定义 bridge+策略路由实现容器流量分发至不同物理网卡。
docker engine 本身不提供“多网卡绑定”功能,它不直接管理宿主机物理网卡的聚合(如 bond、team 或 lacp),也不支持把多个物理网卡“绑定”成一个逻辑接口供自身使用。你真正需要的不是 engine 层的网卡绑定,而是让容器流量有选择地走不同物理网卡——这通过网络路由和 docker 网络配置来实现。
核心思路是:用不同的 Docker 自定义网络对应不同宿主机网卡,再让容器接入这些网络,配合路由策略控制出向流量路径。
✅ 明确前提:确认宿主机多网卡已就绪
先确保宿主机上有多块可用网卡,并各自有独立 IP 和可达网络:
ip -br a # 示例输出: # ens3 UP 192.168.1.100/24 # ens4 UP 10.0.0.100/24
⚠️ 注意:Docker Engine 启动时默认只监听 docker0(bridge 模式)或 host 网络,不会自动感知或绑定 ens3/ens4 等物理接口。你需要手动建立映射关系。
✅ 方案一:用 Macvlan 网络直连物理网卡(推荐用于“容器像物理机一样接入局域网”)
Macvlan 让容器获得独立 MAC 和 IP,直接出现在物理网络中,流量天然走指定网卡。
步骤如下:
-
创建 macvlan 网络,绑定到特定物理接口(如
ens3):docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=ens3 \ macvlan-ens3
-
同理为
ens4创建另一个:docker network create -d macvlan \ --subnet=10.0.0.0/24 \ --gateway=10.0.0.1 \ -o parent=ens4 \ macvlan-ens4
-
启动容器并指定网络(自动分配 IP):
docker run -d --network macvlan-ens3 --ip=192.168.1.200 nginx docker run -d --network macvlan-ens4 --ip=10.0.0.200 nginx
✅ 效果:
- 第一个容器的进出流量全部经
ens3; - 第二个容器全部经
ens4; - 容器拥有真实局域网 IP,可被其他设备直接访问。
⚠️ 注意:macvlan 要求宿主机与目标网络二层互通(不能跨路由器),且部分云平台/虚拟化环境禁用混杂模式,需提前确认。
✅ 方案二:用 Bridge + iptables SNAT 控制出向网卡(适合“所有容器统一出口,但强制走某张卡”)
适用于你想让所有容器默认走某一张物理网卡(如 ens4)上网,而不用改容器配置。
操作:
-
查看 Docker 默认网桥子网(通常是
172.17.0.0/16):ip addr show docker0
-
添加 SNAT 规则,将容器出向流量源地址替换为
ens4的 IP:iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -o ens4 -j SNAT --to-source 10.0.0.100
-
若还需让外部能访问容器服务(入向),启动时指定宿主机监听 IP:
docker run -p 10.0.0.100:8080:80 nginx
✅ 效果:所有容器对外请求都从 ens4 发出,IP 显示为 10.0.0.100。
? 提示:该规则需持久化(如用
iptables-save或 systemd 服务),否则重启后失效。
✅ 方案三:用自定义 bridge + 静态路由(灵活但需手动配路由)
若你希望容器同时接入两个网络(双网卡双出口),比如:
-
eth0→192.168.1.0/24(走ens3) -
eth1→10.0.0.0/24(走ens4)
做法:
-
创建两个 bridge 网络,不绑定物理卡,但后续靠路由区分:
docker network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 net-a docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 net-b
-
启动容器并连接双网:
docker run -d --name app --network net-a your-image docker network connect --ip 10.0.0.50 net-b app
-
在宿主机上添加策略路由,使发往
10.0.0.0/24的包走ens4:ip rule add to 10.0.0.0/24 table 100 ip route add default via 10.0.0.1 dev ens4 table 100
✅ 效果:容器内访问 10.0.0.x 走 ens4,访问 192.168.1.x 走 ens3,其余默认走主路由。
不复杂但容易忽略:Docker Engine 安装后无需修改二进制或配置文件来“绑定多网卡”。关键在网络驱动选型(macvlan/bridge)+ 宿主机路由/iptables 配合。选对方案,一条命令就能让容器流量精准落位到指定物理网卡。











