0%

群辉 Docker 部署 zoffline

众所周知, 群辉默认占用了 80 端口, 443 端口. 而 zoffline 正好需要使用 80 和 443 端口, 如何解决呢?

其实我们可以通过自定义 docker 网络. 创建一个类型为 macvlan 的网络, 手动指定 ip 即可. 具体 ip 和网络需要结合内网实际情况进行尝试和修改.

内网环境

  • zoffline 内网网段: 192.168.0.1/24
  • zoffline 的容器 ip, 一般来说为了避免冲突, 需要在内网子网下, 内网 DHCP 之外. (冲突可能性不是很大, 这里重叠也无所谓…
  • 配置好 zoffline ip 之后, 在路由器 DHCP 页面看不到设备, 因为这属于静态 IP 指定.

确定群辉网卡名称

  • 这里的 ip 是群辉的 ip, 操作时需替换成实际的 ip
  • 一般的网卡名称是 eth0,但实际是 ovs_eth0. 这里是因为我启用了群辉的 openswitch. 畅网 N100 黑群晖踩坑记录
1
2
3
4
 ifconfig | grep "192.168.0.50" -B 2 #替换成实际的 ip

ovs_eth0 Link encap:Ethernet HWaddr A8:B8:E0:01:E6:AD
inet addr:192.168.0.50 Bcast:192.168.0.255 Mask:255.255.255.0

查看通过无线 / 有线连接的设备

方法一

1
2
3
4
5
6
root@op:~# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.1.183 0x1 0x0 00:00:00:00:00:00 * veth1
192.168.0.143 0x1 0x2 fa:a2:ba:82:3b:e4 * br-lan
192.168.1.19 0x1 0x0 00:00:00:00:00:00 * veth1
192.168.0.220 0x1 0x2 00:e0:4c:68:00:76 * br-lan
  • Flags 标志可以表示是否在线状态,0x0 表示离线,标志 0x2 表示在线
  • Device 表示接口的名称

方法二

1
2
3
root@op:~# cat /tmp/dhcp.leases
1740534302 7a:c4:da:71:48:fa 192.168.0.109 * 01:7a:c4:da:71:48:fa
1740534269 b8:09:8a:50:c8:c7 192.168.0.238 IITII-HOME 01:b8:09:8a:50:c8:c7
  • 可以看到 mac 地址,IP,设备名等信息

部署

创建 macvlan 类型网络

根据上面的排查, 结果如下

  • subnet 为 192.168.0.0/24
  • gateway 为 192.168.0.1(直接填路由器 ip 即可)
  • ip-range 指新创建的这个网络的子网范围, 这里设定为 192.168.0.220/31
  • parent 代表父网卡, 这里为 ovs_eth0
  • 最后的 zoffline 为 docker 网络名称
  • 上述数值根据实际情况按需修改
1
2
3
4
5
6
7
8
9
10
11
12
docker network create -d macvlan \
--subnet 192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.220/31 \
-o parent=ovs_eth0 zoffline

❯ docker network ls
NETWORK ID NAME DRIVER SCOPE
66eadb788d79 bridge bridge local
691ecfb35f7d host host local
c09e3197c443 none null local
ae89de5a95e3 zoffline macvlan local

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# dc down && docker network rm zoffline
# dc up -d && docker exec -it zoffline sh

version: "3.3"
services:
zoffline:
image: zoffline/zoffline:latest
container_name: zoffline
networks:
# 这里的 ip 地址 和 network 名称需要一致
zoffline:
ipv4_address: 192.168.0.220
environment:
- TZ=Asia/Shanghai
volumes:
- ./storage/:/usr/src/app/zwift-offline/storage
ports:
- 80:80
- 443:443
- 3024:3024/udp
- 3025:3025
restart: unless-stopped
networks:
# 这里的 ip 地址 和 network 名称需要一致
zoffline:
external: true

启动

  • 执行 dc up -d && docker exec -it zoffline sh 即可
  • 启动后访问对应 ip 即可

题外话: macvlan与host网络互通

  • 大体思路是: 多创建一个 macvlan 网络作为中转, 通过对 iptables 添加路由实现互通.
  • 不过因为我的容器 本来就是独立部署的, 所以不需要macvlan与host网络互通.

https://rehtt.com/index.php/archives/236/

https://post.smzdm.com/p/awkv40k4/

添加 bot 之后内存占用 1.5GB+

  • 尝试重新拉取下最新镜像, 应该可以解决
  • 正常情况下启用 Ghosts, Bots 和 RoboPacers 的占用应该在 350MB 左右
  • https://github.com/oldnapalm/zoffline-bots
  • https://github.com/zoffline/zwift-offline/commit/e4bdc3fdd492c923e7504ad994fb36cf86bcd35a
-------------本文结束再接再厉-------------

本文标题:群辉 Docker 部署 zoffline

文章作者:IITII

发布时间:2025年02月10日 - 14:02

最后更新:2025年03月10日 - 14:03

原始链接:https://iitii.github.io/2025/02/10/1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。