群晖不同的 Docker 容器连接不同网络(指定不同的网关)

需求背景

  • 家中有旁路由,用于实现一些特殊的网络需求
  • 群辉的 Docker 中部署了几个下载、播放和刮削的服务
  • 下载和播放的服务,走正常网络,刮削的服务,则需要指向旁路由的网关

实现方式

关键词:群晖 Open vSwitch、macvlan

操作步骤

启用 Open vSwitch

  • 登录群辉 DSM - 控制面板 - 网络 - 网络界面 - 管理(下拉菜单) - Open vSwitch 设置
  • 启用 Open vSwitch

群晖open vswitch.png

查看群晖 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