一杯咖啡的时间,在 TrueNAS 上把 Minecraft Forge 服务端跑进 Docker 容器
【免费下载链接】docker-minecraft-serverDocker image that provides a Minecraft Server for Java Edition that automatically installs/upgrades versions, modloaders, modpacks and more at startup项目地址: https://gitcode.com/GitHub_Trending/do/docker-minecraft-server
周五晚上,朋友喊你去模组世界集合,而你的家用服务器还是空的。用 TrueNAS Scale 的 Docker 能力,配合 itzg/minecraft-server 这个社区维护的镜像,把 Minecraft Forge 服务端容器化部署,数据落在自己的存储池里,整个过程一小时内能收工。
开始前,先对这几项
- 系统内存至少 4GB,想跑多人或大型 Mod 包建议 8GB 以上
- TrueNAS Scale 中 Docker 服务已启用(设置 > 应用/服务 > Docker)
- 准备出至少 20GB 可用空间,放世界数据的磁盘优先选 SSD
- 计划拉取的镜像是
itzg/minecraft-server,国内网络建议先确认能拉到
它是怎么跑起来的
容器里发生的事并不神秘,抓住这四条就够了:
- TrueNAS 数据集挂载为容器卷,映射到容器内
/data,世界、配置、日志全部持久化在存储池里 - 一组环境变量(服务端类型、游戏版本、内存)决定容器启动时要下载并安装什么,装完自动拉起服务端
- 端口 25565 从容器映射到宿主,玩家客户端连这里
- 端口 25575 是 RCON 管理端口,只有你显式开启 RCON 才需要暴露
动手部署:四步上线
第一步:建数据集和容器网络
在 TrueNAS 的文件系统里新建数据集minecraft/forge-server,用于存放 compose 文件和容器卷。数据集属主设成 Docker 服务实际使用的账号;如果你打算用 root 直接跑容器,这一步最容易翻车——属主不对,后面的 "Changing ownership" 环节就会卡住。再进网络管理建一个 bridge 模式网络,起个名字如mc-net。
第二步:把容器定义写成 compose
在数据集里新建docker-compose.yml,关键行如下,其余可按需增删:
services: mc: image: itzg/minecraft-server ports: - "25565:25565" environment: EULA: "TRUE" TYPE: FORGE VERSION: "1.20.1" FORGE_VERSION: "47.1.0" MEMORY: "4G" volumes: - mc-data:/data - ./mods:/mods:ro restart: unless-stopped volumes: mc-data: {}逐条说人话:
TYPE: FORGE——声明用 Forge 加载器,镜像会在启动时自动下载对应安装器VERSION: "1.20.1"——锁定 Minecraft 版本;不写FORGE_VERSION时默认选该版本官方推荐的 ForgeFORGE_VERSION: "47.1.0"——钉住具体 Forge 版本,写latest则跟随最新MEMORY: "4G"——JVM 堆的初始与上限一起设成 4Gmc-data:/data——命名卷持久化服务端数据;./mods:/mods:ro——本地 mods 目录只读挂入,启动时被拷贝进/data/modsEULA必须为TRUE,否则服务直接拒绝启动
第三步:首次启动与验收
启动容器并跟踪日志(首次会自动下载 Forge 安装器并执行安装,耗时取决于网速):
docker compose up -d docker compose logs -f翻日志盯一行字:Done (t=XX.XXXs)! For help, type "help"出现,说明服务端就绪;客户端填宿主机 IP + 25565 就能试连。
第四步:装 Mod 和基础参数
把 jar 丢进数据集下的./mods/目录即可——只读挂载保证容器改不了源文件,改完重启容器重新加载。先别急着堆 Mod,先把基础参数调顺:编辑/data卷里的server.properties,关注三项——max-players(上限人数)、difficulty(难度)、motd(大厅里显示的服务器名)。完整参数含义见 docs/configuration/server-properties.md。
调优与验收
Minecraft 服务器内存分配有个简单口径:堆按玩家数和 Mod 量给,JVM 垃圾回收器随规模换:
| 玩家规模 | 建议堆内存(MEMORY) | JVM 参数(JVM_OPTS) |
|---|---|---|
| 1~5 人 | 4~6G | -XX:+UseG1GC |
| 6~10 人 | 8~12G | -XX:+UseParallelGC |
参数细节可查 docs/configuration/jvm-options.md。
验收清单,三条全过才算上线:
- 客户端能进游戏,大厅显示的 motd 与你的设置一致
- 踢掉一个玩家再进,
/data卷里world目录有新增文件——数据确实落盘在数据集 docker compose down && docker compose up -d后服务自动拉起,进度照常——restart: unless-stopped在真干活
日常运维三件事
- 快照备份:TrueNAS 计划任务里给
minecraft/forge-server数据集建每周快照,保留 4 周。容器随时可弃,世界数据有快照兜底。 - 闲置自动停止:compose 加
ENABLE_AUTOSTOP: "true"、AUTOSTOP_TIMEOUT_EST: "300"(最后一名玩家离线 5 分钟后停机),注意restart要改成no,停掉后需手动重启。详见 docs/misc/autopause-autostop/autostop.md。 - RCON 远程管理:加
ENABLE_RCON: "true"和RCON_PASSWORD,容器暴露 25575 后,用 rcon-cli 从宿主机连进去下指令,不用进游戏。
踩坑速查
Q:Forge 安装报错,容器起不来?临时加FORGE_FORCE_REINSTALL: "true"重启,强制重装一次;修好后删掉该变量。换下载源可用FORGE_INSTALLER_URL,说明见 docs/types-and-platforms/server-types/forge.md。
Q:启动卡在 "Changing ownership of /data"?把SKIP_CHOWN_DATA: "true"加上,跳过这一步的属主改写(适合容器直接以 root 运行的场景)。
Q:内存溢出、GC 卡顿?先加堆(MAX_MEMORY),再把server.properties里view-distance降到 8;Mod 太重时优先卸载而不是硬堆内存。
这套部署把版本管理交给环境变量,把数据交还给 TrueNAS 存储池,日常只剩"改变量、重启容器"一个动作。想再往前走,可以看看 examples/ftba/ 里的 Web 管理面板玩法,或者用 examples/proxied/ 的多实例加反向代理方案做负载均衡。延伸阅读:docs/variables.md、docs/misc/troubleshooting.md。
【免费下载链接】docker-minecraft-serverDocker image that provides a Minecraft Server for Java Edition that automatically installs/upgrades versions, modloaders, modpacks and more at startup项目地址: https://gitcode.com/GitHub_Trending/do/docker-minecraft-server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考