Docker 从零搭建 Minecraft 服务器:选端、装模组、调内存一次跑通
【免费下载链接】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
用 Docker 搭建 Minecraft 服务器,不必经历"先装 Java、再找 jar、手动塞模组"的老流程。docker-minecraft-server 这个镜像把版本下载、modloader 安装、整合包部署都自动化了,你要做的只是三件事:定服务端类型、定游戏版本、给内存。
开工之前,先回答三个问题
想开服的时候,卡住你的通常是这几个抉择:
- 要纯生存,还是要上模组?
- 上模组的话,是丢几个小 mod,还是直接上整合包?
- 游戏版本和 Java 版本怎么配对才不报错?
这三个问题决定了 compose 里几个字段的取值。先想清楚,后面基本就是套模板的活儿。
按需求挑服务端,别按名字挑
镜像用统一的TYPE环境变量切换服务端,不同需求对应不同取值:
| 你的需求 | TYPE 取值 | 说明 |
|---|---|---|
| 纯生存、最小配置 | VANILLA | 官方原版,无插件机制,跑起来最快 |
| 插件服、要性能余量 | PAPER | Bukkit/Spigot 分支,自动拉最新构建 |
| 轻量小模组 | FABRIC | modloader 轻,适合小中型 mod |
| 重型整合包(ATM、RLCraft 类) | FORGE或AUTO_CURSEFORGE | 重模组更稳,整合包还能按 ID 自动部署 |
几个补充判断:
- 打算挂插件的话直接选
PAPER,别想着先跑 vanilla 以后再迁移,Bukkit 生态的东西 vanilla 装不了。详见 Paper 类型说明。 - Fabric 和 Quilt 共用一套 mod 生态,轻量 mod 的服务器端由 launcher 自动下载,需要单独钉版本时参考 Fabric 类型说明。
- 整合包来自 CurseForge 或 Modrinth 的话,不用自己去下载站搬 zip,镜像按项目 ID 抓取并解析依赖,配置方法见 CurseForge 自动部署 和 Modrinth 配置。
一条主线:从 compose 写到启动成功
选型定了,流程就三步:建目录、写 compose、docker compose up -d,然后等首次世界生成。核心配置就这几行,指定游戏版本、同意 EULA、映射游戏端口、把世界数据留在本地:
services: mc: image: itzg/minecraft-server ports: ["25565:25565"] volumes: [./data:/data] environment: - EULA=TRUE - VERSION=1.21VERSION除了具体版本号,还支持LATEST和SNAPSHOT,后者在重启容器时会顺带完成升级。习惯docker run写法的话,两种形态的字段对应关系是这样的:

Java 版本配对:镜像按 Java 版本拆了 tag。1.18 以后的版本直接用默认 tag;1.12 到 1.16 的端挂:java8,更早或特定 Paper 版本按 Java 版本对照 选 tag。比如跑 1.12.2:
docker run -d -e EULA=TRUE -e VERSION=1.12.2 itzg/minecraft-server:java8内存:默认堆 1G,挂个中型整合包就紧,加一行MEMORY: 2G即可;想精细控制就用INIT_MEMORY和MAX_MEMORY分别指定。注意容器整体还要再留大约 25% 给非堆开销。
整合包:选了AUTO_CURSEFORGE就填项目 ID 和文件 ID,loader 版本由包自身声明,全程不用碰:
environment: - TYPE=AUTO_CURSEFORGE - CF_PROJECT_ID=325345 - CF_FILE_ID=456789看到日志里世界生成完成、端口开始监听,就算跑通了。之后重启容器世界不会丢,全在./data里。
卡住时按这个清单查
⚠️ 按顺序排查,基本能覆盖九成问题:
- 连不上、连接被拒:端口没映射,或宿主机 25565 被别的进程占了,改成
25566:25565试试。 - 启动就退出:日志里提到 eula.txt,说明
EULA=TRUE没配对——注意大小写敏感,true可能不生效。 - 客户端超时但服务端日志正常:查宿主机防火墙和安全组,25565 的 TCP 要放行外网。
- 报 class file version / 类版本错误:Java 和游戏版本不匹配,换镜像 tag 解决。
- 首启慢得像卡死:在下载服务端 jar 和模组,第一次可能要好几分钟,别反复重启。
跑通之后可以继续折腾的方向
- 世界复用与多服:把已有世界目录挂进容器,用
WORLD变量克隆一份给新服,备份、迁移、多服共用基底都很顺手:
- 闲时自动熄火:开启 autopause/autostop,没人在线时服务器自动保存并停止,有玩家进来再拉起,家用低配机器必配。
- 版本升级:
LATEST/SNAPSHOT在重启时自动换用新 jar;整合包升版本只改文件 ID 再重启。 - 集群部署:仓库里
kustomize/目录带着现成的 statefulset 模板,用 k8s 起服也是同一套逻辑。
把这条线走下来,你就有一条能长期维护的 Minecraft 服务器部署方案了。
【免费下载链接】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),仅供参考