电脑端
在 Docker Compose 配置文件中添加 macvlan 网络,可以让容器连接到物理网络,使其像独立设备一样与其他设备通信。这种网络模式非常适用于需要独立 IP 的容器应用,比如需要与局域网中其他设备通信的服务。
使用 macvlan 的场景
1. 需要独立 IP 的服务,比如边缘计算服务(如网心云、甜糖),它们需要容器与宿主机隔离,并使用路由器提供公网 IP 服务。使用 macvlan 可以让容器获得独立的 IP,从而享受独立的路由器功能,如 UPnP。
2. 需要网络带宽管理的容器,当你需要通过路由器对特定容器进行带宽限制时,macvlan 允许路由器将容器视为独立设备,轻松实现限速。
配置示例
下面是一个 emby 容器的 docker-compose.yaml 配置示例,展示如何将网络从 bridge 模式切换为使用 macvlan 网络。
原始配置文件
services:
emby:
image: emby/embyserver:beta
container_name: emby-server
restart: always
devices:
- /dev/dri:/dev/dri
environment:
UID: 0
GID: 0
GIDLIST: 0
volumes:
- ./config:/volume1/docker/emby/config
- ./metadata:/volume1/docker/emby/metadata
- /volume2/video:/video2
ports:
- 8096:8096/TCP
network_mode: "bridge"
修改后的配置文件
services:
emby:
image: emby/embyserver:beta
container_name: emby-server
restart: always
devices:
- /dev/dri:/dev/dri
environment:
UID: 0
GID: 0
GIDLIST: 0
volumes:
- ./config:/volume1/docker/emby/config
- ./metadata:/volume1/docker/emby/metadata
- /volume2/video:/video2
ports:
- 8096:8096/TCP
networks:
vlan1:
ipv4_address: 172.17.20.88
networks:
vlan1:
external: true
修改点说明
1. 删除了 network_mode: "bridge",因为我们将网络模式从 bridge 改为 mac

networks 部分定义了 vlan1,并标记为 external: true。修改后容器不会创建新网络,而是使用已经在系统中配置好的名为 vlan1 的 macvlan 网络。
3. 由于 macvlan 网络不支持 Docker 自行分配 IP 地址,我们手动为 emby 容器指定了 IP 地址 172.17.20.88。这个 IP 必须在你的局域网子网范围内,避免与其他设备冲突。
4. 在使用此配置前,请确保你已经在 Docker 应用的“网络”中创建了名为 vlan1 的 macvlan 网络。未创建的话,容器将无法正常启动。
创建 Macvlan 网络
如果尚未创建名为 vlan1 的 macvlan 网络,请按照以下步骤操作:
一、打开 Docker 应用
在系统中,进入Docker应用,点击左侧栏的“网络”选项,然后点击“新增”按钮,打开网络配置向导窗口。
二、配置网络参数
在网络配置向导中,按照以下步骤逐步配置:
● 网络名称:为网络指定一个易于识别且具有描述性的名称,例如 vlan1。建议名称简明扼要,以便日后管理和查找。
● 网络模式:选择 macvlan 作为网络模式。Macvlan 模式允许容器直接连接到物理网络,并与局域网中的其他设备进行通信,如同它们是独立的物理设备。
● 网卡选择:选择你希望使用的物理网卡,如果尚未设置,请打开控制面板应用,点击“网络设置”>“网络连接”,设置虚拟桥接网卡。
● IPV4/IPV6 配置:根据你的网络需求,设置 IP 地址段和网关信息,如果您没有计划手动配置,可以跳过这一步。
IPV4/IPV6 配置参数说明:
● IPV4 子网掩码(可选):输入与局域网匹配的子网掩码。例如,标准的家庭网络可以使用 255.255.255.0。
● IPV4 网关(可选):输入网络的默认网关,例如 192.168.1.1,该网关通常是连接互联网的路由器 IP 地址。
● IPV6 设置(可选):如果你计划在网络中启用 IPV6 功能,可以手动配置 IPV6 地址段和网关信息。否则可以跳过这一步。
注意:
● 在网卡选择步骤中,网卡必须已经设置为桥接模式,才能在此选项中可选。
● 子网掩码和网关信息必须与现有局域网保持一致,以避免容器无法正确加入网络或导致 IP 冲突的问题。
三、确认并创建网络
检查所有设置无误后,点击“确定”按钮,即可完成 macvlan 网络的创建。该网络将在 Docker 网络列表中显示,供后续使用。

注意事项
● 一个物理网卡只能配置一个 macvlan 网络,如果需要多个 macvlan 网络,请确保宿主机nas有足够的网卡或通过虚拟网卡桥接实现。
● 使用 macvlan 时,确保子网与宿主机一致,避免网络连接异常。
如何将容器运行在 Docker 的 Macvlan 网络上
什么是macvlan?
简单来说,Macvlan 是一种 Linux 上的虚拟网卡技术,允许用户在一张物理网卡上创建多个虚拟网卡,并为每个虚拟网卡分配独立的 MAC 地址。这些虚拟网卡表现得像是网络中的独立设备。Docker 使用 Macvlan 技术来配置容器网络,使得容器可以与宿主机(如 NAS)位于同一局域网内。
何时需要使用 Docker 的 Macvlan?
在某些场景中,容器需要具备与宿主机隔离的网络环境,或者需要独立的网络接口来处理特定任务。这时可以考虑使用 Macvlan 来代替 host 模式。以下是一些常见的使用场景:
边缘计算服务容器(如网心云、甜糖等): 这些服务通常需要容器与宿主机共享网络环境,并且要求具有公网映射的 IP 地址。如果使用
bridge模式,容器会运行在 Docker 提供的虚拟网络中,即便路由器有公网 IP,容器的网络仍受限于端口映射。这时,使用 Macvlan 网络可以使容器像一个独立设备,让路由器提供 UPNP(通用即插即用)服务,避免端口限制。网络流量控制: 如果您希望对容器进行独立的网络速度限制,Macvlan 是一个很好的选择。通过将容器视为独立设备,路由器可以对其单独配置限速规则,而不需要修改宿主机nas的网络配置。
如何配置 Docker 的 Macvlan 网络
要在 Docker 中配置并使用 Macvlan 网络,您可以按照以下步骤进行:
创建 Macvlan 网络
步骤 1:打开 Docker 应用界面,点击【网络】>【新增】,进入“新增网络 - 网络配置”界面。
步骤 2:自定义一个网络名称,以便后续识别和管理。
步骤 3:在“网络模式”中选择“Macvlan”,并在“网卡”栏选择要用于创建 Macvlan 网络的物理网卡。如果没有可用网卡,请前往【控制面板】>【网络设置】>【网络连接】,点击【网络桥接】进行配置。
请注意:
在网络桥接设置中,您可以选择普通桥接或虚拟桥接。如果没有普通桥接的需求,建议选择虚拟桥接。创建虚拟桥接时,请勾选需要桥接的物理网卡并点击“应用”,系统将生成虚拟桥接网卡。每个物理网卡只能创建一个虚拟桥接网卡。
此外,每个物理网卡也只能创建一个 Macvlan 网络。要创建 Macvlan 网络,网卡必须已经处于桥接模式。如果该网卡已用于其他 Macvlan 网络,则无法重复选择。
步骤 4:配置 Macvlan 的 IPv4 和 IPv6 地址。默认情况下,IPv4 地址会自动分配,且网络会自动设置为与 NAS 位于相同的子网并使用相同的网关。如果需要启用 IPv6,请勾选对应的选项并配置相关参数。
步骤 5:确认所有配置无误后,点击“确定”完成 Macvlan 网络的创建。
将容器连接到 Macvlan 网络
步骤 1:在 Docker 应用中,点击【容器】,选择需要配置 Macvlan 网络的容器,点击“···”>“编辑”进入容器编辑界面。
步骤 2:注意:默认情况下,已创建的容器无法直接修改网络模式。如果要更改,请点击顶部提示中的“仍要编辑”按钮,然后修改网络设置。

步骤 3:将容器的网络模式更改为 Macvlan,并选择刚创建的 Macvlan 网络。完成后,点击“保存”使更改生效。
如何在 Docker Compose 中配置 Macvlan 网络
https://www.zzssp.com/archives/Macvlan
评论