在威联通 QTS 的 Container Station 上使用类似虚拟机的桥接网络

日常使用时,我们可以注意到:在创建容器时,Web UI 上其实是允许容器使用虚拟交换机网络而非 NAT 的。这个选项的效果类似于虚拟机平台的虚拟交换机(或者有些时候称之为桥接网络),和直接使用 network_mode: "bridge" 有显著区别。

出于好奇,索性这样创建一个容器,然后直接 SSH 到机器上面看看生成的东西是啥样的。这个容器的实现也很直接,SSH 上去可以直接使用现成的 Docker 的命令行客户端,所以直接看看 Docker 的网络。

可以注意到这里使用了一个定制的 Docker 网络驱动。这下就明白了,然后我们可以来搜一下怎么在 Docker Compose 里调用它。

也比较顺利,直接搜到了官方的文档:Qnet — Container Station documentation (qnap-dev.github.io),这里面给出了示例:

那么直接复制粘贴就可以了。不过也发现一个问题,重新创建应用会导致 MAC 变化,DHCP 服务器上配置的静态分配不生效。此时可以直接给 services.qnet_dhcp 下设置一个 mac_address 属性来指定 MAC 地址,就不会有问题了。

引用

Qnet — Container Station documentation (qnap-dev.github.io)

威联通 QTS 启动 Jellyfin,使用 Container Station 容器工作站

左侧栏新建“应用程序”,下面给出可用的 docker-compose.yml

version: '3.5'
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 0:0
    network_mode: 'host'
    volumes:
      - /share/Container/jellyfin/config:/config
      - /share/Container/jellyfin/cache:/cache
      - /share/Media:/mnt/media:ro
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    restart: 'unless-stopped'
    environment:
      - http_proxy=http://<proxy-host>:<proxy-port>
      - https_proxy=http://<proxy-host>:<proxy-port>
      - HEALTHCHECK_URL=http://<qts/jellyfin-host>:8096/health
    extra_hosts:
      - "host.docker.internal:host-gateway"

基于 Jellyfin 官方给出的 yml 修改而来,挂载设备以支持硬件解码。由于 QTS 上该设备所有者为 0:0,且权限为 600,无法通过添加 –group-add 参数来让同组不同用户使用该设备,因此只能让这个容器按 root:root 启动了,可能有些许风险。

添加环境变量以加速元数据刷新,修改健康检查地址使之状态正常。

引用

Container | Jellyfin

Intel GPU | Jellyfin