群晖不同的 Docker 容器连接不同网络(指定不同的网关)
需求背景
- 家中有旁路由,用于实现一些特殊的网络需求
- 群辉的 Docker 中部署了几个下载、播放和刮削的服务
- 下载和播放的服务,走正常网络,刮削的服务,则需要指向旁路由的网关
实现方式
关键词:群晖 Open vSwitch、macvlan
操作步骤
启用 Open vSwitch
- 登录群辉 DSM - 控制面板 - 网络 - 网络界面 - 管理(下拉菜单) - Open vSwitch 设置
- 启用 Open vSwitch
查看群晖 Docker 的网络类型
- SSH 登录到群晖,
sudo -i
获取 root 权限 - 执行
docker network ls
检查 docker 当前的网络详情 如果已经有 macvlan 类型的网络,则执行
docker network rm name
删除- name 要换成你自己的 macvlan 网络名称
创建自己的 macvlan 网络
- 使用如下的命令行,注意替换成你自己的子网和网关
docker network create -d macvlan --subnet=192.168.0.1/24 --gateway=192.168.0.2 -o parent=ovs_eth0 mymacvlan
创建容器并选择该网络
- 回到群晖中 Docker 的可视化界面,可以在 “网络” 页面看到该网络了
创建 Docker 容器时选择该网络,会为该容器生成一个虚拟的 mac 地址
- 在你路由器的设备管理界面可以看到,请自行查询你路由器品牌的使用指南
为容器指定静态 IP
- 为了防止多个使用 macvlan 的容器之间出现 IP 冲突,建议不要使用群晖的可视化界面创建容器
推荐使用命令行创建容器并指定固定 IP,然后在路由器中绑定 IP 和 mac 地址,举例如下
- 其中:name 是容器名称;net 是你自己的 macvlan 网络名称,ip 是你希望为该容器指定的静态地址
docker run -d --name=TMM --net=mymacvlan --ip=192.168.1.3 --privileged=true --restart=always dzhuang/tinymediamanager:latest