macvlan快速配置
启动macvlan
1.容器一:开机自动创建macvlan
/home/macvlan/docker-compose.yml
version: '3.3'
services:
dummy_service:
image: busybox # busybox占用空间少
command: ["sleep", "3600"] # 让容器运行1小时,保持运行
networks:
- my_macvlan # 连接到 macvlan 网络
restart: always
networks:
my_macvlan:
driver: macvlan
driver_opts:
parent: enp6s0 # 使用 enp6s0 作为父接口,网卡名字需要修改,使用 ip link show 查看网卡名
ipam:
config:
- subnet: 192.168.2.0/24 # 子网地址
gateway: 192.168.2.1 # 网关地址
2.其他容器引用刚才创建的macvlan_my_macvlan网络
P.S. docker会自动在原来的名字前面加一个前缀macvlan_
容器二:引用macvlan
version: "3.3"
services:
xxx:
image: xxx/xxx:latest
container_name: xxx
restart: unless-stopped
ports:
- 80:80
- 443:443
networks:
macvlan_my_macvlan: # 使用外部网络 my_macvlan
ipv4_address: 192.168.2.8 # 为容器指定静态 IP 地址
mac_address: "aa:11:11:11:11:11" # 192.168.2.8的mac地址
networks:
macvlan_my_macvlan:
external: true # 引用已存在的外部网络
容器三:引用macvlan
version: "3.3"
services:
yyy:
image: yyy/yyy:latest
container_name: yyy
restart: unless-stopped
ports:
- 1234:1234
- 5678:5678
networks:
macvlan_my_macvlan: # 使用外部网络 my_macvlan
ipv4_address: 192.168.2.10 # 为容器指定静态 IP 地址
mac_address: "bb:22:22:22:22:22" # 192.168.2.10的mac地址
networks:
macvlan_my_macvlan:
external: true # 引用已存在的外部网络
路由器看到的效果:
最好在路由器后台给设定的ip和mac做一个静态地址绑定
macvlan宿主机连通
本机无法ping通本机macvlan的IP(如192.168.2.8
),只有局域网内的其他设备能ping通该IP。若需本机也能连接192.168.2.8
,需配置中转IP(如192.168.2.101
),配置后本机可通过192.168.2.101
访问192.168.2.8
的服务。
sudo ip link add macvlan0 link enp6s0 type macvlan mode bridge
sudo ip addr add 192.168.2.101/24 dev macvlan0 # 为宿主机分配一个 IP 地址
sudo ip link set macvlan0 address 00:7F:9B:3D:4A:01 # 指定 MAC 地址
sudo ip link set macvlan0 up # 启动虚拟接口
最好还是在路由器里面给ip(192.168.2.101)和mac(00:7F:9B:3D:4A:01)绑定静态地址
将上面四条合并后放入crontab开机自动设置:
@reboot sudo ip link add macvlan0 link enp6s0 type macvlan mode bridge && sudo ip addr add 192.168.2.101/24 dev macvlan0 && sudo ip link set macvlan0 address 00:7F:9B:3D:4A:01 && sudo ip link set macvlan0 up
删除接口(删除后不互通)
sudo ip link set macvlan0 down # 停用接口
sudo ip link delete macvlan0 # 删除接口
查看接口
ip link show