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
Last modification:March 23, 2025
V50%看看实力