群晖创建桥接网络-使容器和路由器一个网段

终端中输入ip addr查看网络信息,找到你群晖ip地址所在的那行

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

我的是群晖IP所在网络接口是ovs_eth0,我估计大部分单网口的应该都是这个数值,复制这个ovs_eth0

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

2020.04.23 更新

打开网卡混杂模式

Code example
1
2
# 打开网卡混杂模式
ip link set ovs_eth0 promisc on

接下来创建docker桥接网络:bridge-host

Code example
1
2
3
4
5
docker network create -d macvlan
    --subnet=192.168.99.0/24
    --gateway=192.168.99.1
    -o parent=ovs_eth0
    bridge-host

需要自己修改的地方我都备注了是什么意思,大家需要根据自己的情况自行修改

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

注意!

一旦选错网口,虽然这个桥接网络可以创建,但是创建容器指定这个网络的时候将会提示Docker API失败。请访问Docker日志以获得更多信息。,所以一定要看好我一开始就看成eth0了,结果怎么弄都出错,后来一细看,原来搞错了

创建出于这个桥接网络下的容器

如图所示,在创建容器的网络页面添加这个网络,之后删除群晖默认的桥接网络

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通
群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通
群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

这样创建的容器的IP是不固定的,重启容器的时候可能会变,并且也不太好查ip,需要进路由器里看

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

所以我建议是在终端里创建容器,并指定ip,群晖的docker控制台实在是太简陋了,虽然易用,但是这种功能都不集成

创建容器并指定ip

Code example
1
docker create --name plex --network bridge-host --ip=192.168.1.5 linuxserver/plex
群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通

简单说明一下,用create容器是因为,大量的基础设置都没做,可以创建完容器后修改容器配置

群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通
预览

这样创建好的容器可以一个容器占用一个ip的所有端口,所以也就不需要做端口转发了,很多容器的高级功能都需要在这样的网络下,所以有的时候还是会用得上。

emby的话,需要DLNA功能也需要这样创建容器

docker macvlan 官方文档

docker macvlan 官方文档写的非常详细,有具体的例子可以参考

https://docs.docker.com/network/macvlan/#bridge-mode

有些应用程序,特别是传统的应用程序或监控网络流量的应用程序,希望直接连接到物理网络。在这种类型的情况下,你可以使用macvlan网络驱动为每个容器的虚拟网络接口分配一个MAC地址,使其看起来是一个直接连接到物理网络的物理网络接口。在这种情况下,你需要在你的Docker主机上指定一个物理接口用于macvlan,以及macvlan的子网和网关。你甚至可以使用不同的物理网络接口来隔离你的macvlan网络。请记住以下几点。

由于IP地址耗尽或 “VLAN扩散”,很容易在无意中损坏你的网络,这是你的网络中的唯一MAC地址数量不当的情况。

你的网络设备需要能够处理 “混杂模式”,即一个物理接口可以分配多个MAC地址。

如果你的应用可以使用桥接(在单个Docker主机上)或叠加(在多个Docker主机之间进行通信),从长远来看,这些解决方案可能会更好。

THE END