Docker网络指定使用的网卡作为出流量
准备工作
- 确认需要指定的网卡名称,可以使用
ip a
命令查看。并自行替换以下命令中的ens224
为你需要指定网卡的名称
一、创建Docker网络
用于只有在这个网络下的所有容器路由到指定网卡,默认容器不受影响
docker network create \
--subnet=192.168.9.0/24 \
--gateway=192.168.9.1 \
mynet
二、定义路由表
echo "100 ens224rt" >> /etc/iproute2/rt_tables
三、添加路由规则
ip route add default via 192.168.11.2 dev ens224 table ens224rt
四、添加路由规则
ip rule add from 192.168.9.0/24 table ens224rt
检查是否正确
ip route show table ens224rt
应当确保有一个正确输出,则表示配置正确
创建一个容器测试网络分流情况
docker run -it --rm --network=mynet busybox:latest /bin/sh
若您是做外网分流可以输入下发指令只要正确下载了index.html
则代表指定成功,否则请检查外网分流(如旁路由)
wget https://www.youtube.com/
五、开机自动配置
由于网络相关设置默认没有持久保存,重启后会恢复默认,所以我们可以使用最简单稳妥的办法使用系统服务在内核加载阶段网卡启动成功后执行脚本自动配置路由表
/usr/local/bin/ens224rt.sh
#!/bin/bash
# 添加自定义路由表和规则
ip route add default via 192.168.11.2 dev ens224 table ens224rt
ip rule add from 192.168.9.0/24 table ens224rt
/etc/systemd/system/ens224rt.service
[Unit]
Description=Custom routing for Docker 192.168.9.0/24 via ens224
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ens224rt.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
chmod +x /usr/local/bin/ens224rt.sh
systemctl enable ens224rt.service