# 【Docker 整合】完美国际 173 端单容器镜像:NAS 一条命令开服,存档持久化,自带踩坑实录
> 来源:游蝶网单的完美国际 173 端 VMware 包(服务端 VM + 客户端 V3456),本人做了 Docker 化整合。 > 感谢原端作者与游蝶网单的整理打包。
## 一、这是什么
把 11.3GB 的 VMware 虚拟机服务端,整合成**一个 Docker 镜像**(约 5GB):Ubuntu 24.04 底座 + 原端 CentOS 同源 i386 老库注入,虚拟机里的全套服务(glinkd/authd/gamedbd/gdeliveryd/gfactiond/gs 等"八大件"+ MariaDB + JDK8 + iweb)全部装进单个容器,**内部互联零改动**,对外只开两个端口。
NAS(或任何 x86 Linux 机器)上 `docker compose up -d` 一条命令开服,`restart: unless-stopped` 开机自启,游戏存档走 Docker 卷持久化——`docker compose down` 不丢档。
## 二、亮点
- **镜像即整机**:不用装 VMware,不用改任何服务端配置(内部拓扑全是 127.0.0.1) - **存档卷持久化**:角色数据(gamedbd 文件存储)+ 账号库(MySQL)独立数据卷,升级/重建容器存档都在 - **自愈**:容器入口脚本带 glinkd 存活监控,服务掉线自动重启 - **首次启动全自动**:空数据卷自动初始化 MariaDB、建账号库(含 adduser 等 26 个存储过程)、拉起全套服务 - 踩坑全记录(文末 FAQ),包括客户端连接的几个隐蔽大坑
## 三、环境要求
| 项 | 要求 | |---|---| | 架构 | **x86_64**(服务端是 32 位 i386 二进制,ARM 的 NAS 跑不了) | | Docker | 18.09+(建议 20+;群晖/威联通/飞牛 fnOS/Unraid 均可) | | 内存 | ≥2GB 空余 | | 磁盘 | 镜像 ~5GB + 存档预留,建议 10GB+ |
## 四、部署(三步)
```bash # 1. 导入镜像(1.84GB 压缩包,下载后) docker load < wm-all.tar.gz
# 2. 写 docker-compose.yml(见下)或直接 docker run # 3. 启动 docker compose up -d # 看启动进度:docker logs -f wm-all # 出现 "glinkd 29000 就绪,服务器启动完成" 即开服成功 ```
`docker-compose.yml`:
```yaml services: wm-all: image: wm-all:latest container_name: wm-all restart: unless-stopped ports: - "29000:29000" # 游戏网关(客户端入口) - "29200:29200" # 账号认证(完美国际登录是直连这个端口,不开放就"连接断开"!) volumes: - wm-saves-dbhome:/root/pwserver/gamedbd/dbhome # 角色数据真实落点(存档就在这) - wm-saves-dbhomewdb:/root/pwserver/gamedbd/dbhomewdb # 写穿缓存 - wm-saves-backup:/root/pwserver/gamedbd/backupwdb - wm-mysql:/var/lib/mysql # 账号库 environment: - TZ=CST-8
volumes: wm-saves-dbhome: wm-saves-dbhomewdb: wm-saves-backup: wm-mysql: ```
> ⚠️ 卷映射请照抄上面这份:`dbhome` 才是角色数据的真实落点。老版本 compose 把卷挂到 `dbdata`/`dblogs` 等游戏根本不写的路径,平时看着正常,**重建容器就丢角色进度**。
> ⚠️ 29200 端口必须一起发布!这个端登录流程是客户端**直连 authd:29200** 认证,只开 29000 的话能进登录界面、一点登录就"与服务器的连接已经断开"(本人排了半天才定位的坑)。
## 五、客户端连接
用原帖的客户端 V3456,改**三个文件**里的服务器 IP 为你 NAS 的 IP(默认内置 `29000:192.168.200.100`,是原虚拟机的地址,必须改):
1. `element\serverlist.txt` —— 选服列表 2. `element\userdata\currentserver.ini` —— 登录界面实际用的"当前服务器"缓存 3. `patcher\server\serverlist.txt` —— **真正发起连接的地址**(`startbypatcher` 启动模式读的是它,最大的坑)
三个文件都是 UTF-16LE 编码,用记事本能改(改完另存为"Unicode"编码)。改完用登录器或 `element\elementclient.exe game:cpw nocheck startbypatcher console:1` 启动。
## 六、账号
- 镜像内置账号:`1234` / `123456`(登录后可直接建角色) - 新建账号(NAS 上执行,密码与用户名拼接取 md5 后入库):
```bash docker exec wm-all mariadb -uroot -p123456 wm -e \ "call adduser('新账号', 0x, 'q', 'a', '127.0.0.1', '0', '[email protected]', '0','0','0','0', '密码明文', '0','0','0', '0', 0x)" ```
- 客户端限制:密码 **6~10 位**,账号建议 6 位以上
## 七、数据与备份
- 游戏存档(角色/物品/进度)在 `wm-saves-*` 卷,账号在 `wm-mysql` 卷 - 备份:`docker run --rm -v wm-docker_wm-saves-dbhome:/data -v $(pwd):/backup alpine tar czf /backup/saves.tgz /data`(卷名按 `docker volume ls` 实际为准;`wm-docker_` 前缀对应你的 compose 目录名) - ⚠️ `docker compose down -v` 会**删除全部存档**,平时只用 `down`/`stop`
## 八、FAQ(全是本人实测踩过的坑)
**Q1:能进登录界面,点登录就"与服务器的连接已经断开"** 按顺序查:① 29200 端口发布了没有(见第四节);② 客户端三个 serverlist 文件都改了没有(第五节);③ 如果开着代理/VPN 的 TUN 模式,先关掉再试——fake-IP 代理会把"连不上"伪装成"连上又被断开",极难排查。
**Q2:登录提示密码错误但密码明明对** 本镜像密码哈希已修复为正确的 binary 存储。如果你是自己从原 VM 的 MySQL 导数据:注意原库 `users.passwd` 是 latin1 按字节存的 md5,跨字符集 mysqldump 导入 utf8 库会把哈希转坏(所有账号集体登录失败),需把列改成 `VARBINARY(64)` 后用 `UNHEX()` 重写。
**Q3:双倍经验等时间类功能不对** 容器内时区已设 `TZ=CST-8`。这个端的老 C++ 二进制不认 `Asia/Shanghai` 格式,自己改配置时别换回去。
**Q4:怎么确认服务起来了** `docker exec wm-all ss -tln` 应看到 29000/29100/29200/29300/29301/29400/29401/29500/29600/29702/29712/10901/11101/65535 共 14 个游戏端口监听(MySQL 3306 默认只听容器内 127.0.0.1,不对外);`docker logs wm-all` 末尾有"glinkd 29000 就绪"。
**Q5:容器/NAS 重启后,新建的账号和角色进度还在吗** 在。账号库持久化在 `wm-mysql` 卷,角色数据在 `wm-saves-*` 卷;入口脚本带首启判定(库只导一次),本人实测重启零重导、新建账号原样存活。
**Q6:想改回原虚拟机方案** 镜像与 VMware 包互不干扰;客户端三个 serverlist 改回 `192.168.200.100` 即可(需虚拟机在跑)。
## 九、下载
- 服务端镜像:通过网盘分享的文件:wm-all.tar.gz 链接: 复制这段内容后打开百度网盘手机App,操作更方便哦 SHA256:`a02db0e88262fc44522b1c93776310a526bda8566559a81a3b95c875dce7db24` 导入:`docker load < wm-all.tar.gz` - 客户端:用原帖 V3456 客户端 - **客户端连接修正包**:通过网盘分享的文件:wm-client-fixpack.zip 链接: 复制这段内容后打开百度网盘手机App,操作更方便哦 含三文件自动切换脚本(switch-server.ps1)、启动游戏.bat、中文使用说明——不会改配置的直接用这个包,一条命令切服,不用手动碰 UTF-16 编码
个人整合作品,仅供本地单机研究学习,请勿商用;转载注明原端来源(游蝶网单)与本帖。另外本人使用的是这个版本 ... EA%C3%C0&page=1
资源下载
正在确认访问权限…