背景
在Docker容器中,或者在家庭NAS中,很多情况下对于Docker容器都需要有独立的IP,方便来做一些网络的分流,也能更好的去记录和反向代理
创建MacVlan网络
docker network create -d macvlan --subnet=192.168.0.0/16 --gateway=192.168.0.1 -o parent=enp3s0-ovs macvlan- enp3s0-ovs 网卡ID

创建成功提示

创建容器,这里以 qb 为例
version: "3"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- WEBUI_PORT=8080
volumes:
- ./config:/config
- /vol2/1000/影视存储/downloads:/downloads
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
restart: unless-stopped
networks:
macvlan:
ipv4_address: 192.168.220.100
networks:
macvlan:
external: true这里的:192.168.220.100 就是你自己需要固定的IP地址
这时候其实你已经可以从你局域网里面访问到你固定IP地址的服务了,但是这时候你会发现,你的容器之间是没办法互访的。比如我的lucky也是搭建在一起,那么反向代理的时候,是访问不到192.168.220.100的。因为macvlan距离隔离性。

允许容器互访
- 通过虚拟网桥来实现与宿主机之间的互通,并且要设置开机自启。
通过SSH链接到飞牛,并且进入到root账户下
ssh xxx@飞牛的IP地址
sudo -i // 进入root账户
设置基础网络配置文件
/usr/local/bin/setup_network.sh脚本文件
#!/bin/bash
# 创建 macvlan 网卡,vlan_bridge可自定义
ip link add vlan_bridge link enp3s0-ovs type macvlan mode bridge
# 配置 IP 地址,手动填一个子网中未用过的 IP
ip addr add 192.168.220.1 dev vlan_bridge
# 启动 macvlan 网卡
ip link set vlan_bridge up
# 添加路由,目标 Docker 的 IP
ip route add 192.168.220.0/24 dev vlan_bridge- 192.168.220.0/24: 是我的虚拟机使用的IP断,你可以改成你自己的规划
- 192.168.220.1: 是一个子网中不使用的IP地址,也是作为通讯的网关
- vlan_bridge: 名称自己随便定义
- enp3s0-ovs: 网卡接口ID,和上面的一致
脚本赋权,同时新增重启自动新增
chmod +x /usr/local/bin/setup_network.sh新增开机启动Service文件
/etc/systemd/system/setup-network.service
[Unit]
Description=Setup Network for macvlan
After=network.target
[Service]
ExecStart=/usr/local/bin/setup_network.sh
Type=oneshot
RemainAfterExit=true
[Install]
WantedBy=multi-user.target启动
systemctl daemon-reload
systemctl enable setup-network.service自启动
将以下内容复制到/etc/rc.local如图所示

(sleep 60 && service setup-network restart ) &重启
这时候重启机器,应该就已经可以使用了


最新脚本代码,延迟启动,否则有可能会系统覆盖,导致失效
```
#!/bin/bash
# 创建 macvlan 网卡,vlan_bridge可自定义
ip link add vlan_bridge link enp3s0-ovs type macvlan mode bridge
# 配置 IP 地址,手动填一个子网中未用过的 IP
ip addr add 192.168.220.1 dev vlan_bridge
# 延迟10秒启动 macvlan 网卡和添加路由,但不阻塞当前脚本
(
sleep 10
# 启动 macvlan 网卡
ip link set vlan_bridge up
# 添加路由,目标 Docker 的 IP
ip route add 192.168.220.0/24 dev vlan_bridge
) &
# 脚本继续执行或结束,此时macvlan 网卡启动会被延迟,但脚本不阻塞
```