用 Docker 部署 Minecraft 服务器:原版 / Paper / Spigot / Forge / Fabric / BungeeCord 全面实战

3331 字
17 分钟
用 Docker 部署 Minecraft 服务器:原版 / Paper / Spigot / Forge / Fabric / BungeeCord 全面实战

这篇是给未来自己和喜欢折腾的服主看的:从零开始,用 Docker 把 Minecraft 服务器(原版 / Paper / Spigot / Forge / Fabric / BungeeCord)一网打尽,顺带把 Java 版本、内存、端口、备份和常见坑都说清楚,之后再开新服直接照着抄。

一、整体思路:用 Docker 管理所有 Minecraft 服务端#

传统部署 Minecraft 服务端通常是:

  • 直接在系统里装 JDK;
  • 下载 server.jar(原版或 Paper 等);
  • 自己写脚本启动。

问题是:

  • 环境难以迁移:换一台机器要重配一遍 Java/脚本;
  • 多服管理麻烦:开多个不同版本 / 不同核心容易乱;
  • 升级/回滚不方便

Docker 化之后的好处:

  • Java 环境、启动脚本都在镜像里,宿主机只要有 Docker 就能跑
  • 数据分离在挂载卷中,迁移就是复制一份目录;
  • docker-compose 一键启动/停止多个服(生存 / 创造 / 练级 / Mod 服 / Bungee 网关)。

本文会围绕一个非常好用的镜像:

  • itzg/minecraft-server:支持 Vanilla / Paper / Spigot / Forge / Fabric / Quilt / Sponge 等 多种类型;
  • itzg/bungeecord:可用来搭建 BungeeCord / Waterfall 等代理。

二、准备工作:硬件 / 端口 / 目录 / Java 认知#

1. 基本硬件建议#

根据经验(仅供参考,具体还和玩家数量 / 插件 / 模组复杂度有关):

  • 纯原版小服(2–5 人)
    • CPU:2 核
    • 内存:4G(分配给 MC 2G 左右)
    • 磁盘:20G+
  • Paper/Spigot 生电 / 生存 10–20 人
    • CPU:4 核以上
    • 内存:8G 以上(MC 分配 4–6G)
    • SSD 磁盘更香
  • Forge / Fabric 大型模组服
    • CPU:4–8 核
    • 内存:8–16G(根据模组数量增加)

2. 端口规划#

默认情况下:

  • 游戏端口25565/TCP(主世界服);
  • 如果做 BungeeCord:
    • Bungee 代理端口:25565
    • 后端各子服各用一个端口,例如:
      • 生存服:25566
      • 创造服:25567
      • Mod 服:25568

所有端口需要在:

  • 云服务器安全组 / 防火墙中放行;
  • 家宽环境下在路由器做端口转发。

3. 数据目录规划#

统一放在宿主机一个目录如:

Terminal window
mkdir -p ~/docker-data/minecraft
cd ~/docker-data/minecraft

计划如下:

  • ~/docker-data/minecraft/vanilla:原版核心存档与配置;
  • ~/docker-data/minecraft/paper:Paper 服;
  • ~/docker-data/minecraft/spigot:Spigot 服;
  • ~/docker-data/minecraft/forge:Forge 模组服;
  • ~/docker-data/minecraft/fabric:Fabric 模组服;
  • ~/docker-data/minecraft/bungee:BungeeCord 代理;

4. Java 版本与内存配置#

使用 itzg/minecraft-server 的好处是:

  • 镜像内已经包含适配好的 Java;
  • 可以通过环境变量控制内存分配。

常用环境变量:

  • MEMORY:如 4G,控制 -Xmx 最大堆大小;
  • 也可以通过 JVM_OPTS 自己指定高级 GC 配置等(如 G1GC、ZGC)。

不同 MC 版本对 Java 版本要求概略:

  • 1.16 以下:Java 8;
  • 1.17–1.18:Java 16/17;
  • 1.19+:推荐 Java 17。

itzg/minecraft-server 默认会根据版本自动选择合适的 Java,通常无需自己操心。

三、基础镜像与最小原版服示例#

首先拉取通用服务端镜像:

Terminal window
docker pull itzg/minecraft-server:latest

生产环境建议固定版本,如:itzg/minecraft-server:java17 或指定日期/版本标签。

1. 最小原版生存服(docker run 方式)#

先在宿主机创建数据目录:

Terminal window
mkdir -p ~/docker-data/minecraft/vanilla

运行:

Terminal window
docker run -d \
--name mc-vanilla \
-e EULA=TRUE \
-e VERSION=1.20.4 \
-e MEMORY=4G \
-p 25565:25565 \
-v ~/docker-data/minecraft/vanilla:/data \
itzg/minecraft-server:latest

参数说明:

  • EULA=TRUE必须 同意 Mojang EULA,否则服务端不会启动;
  • VERSION=1.20.4:指定 MC 版本;
  • MEMORY=4G:给 JVM 分配 4G 内存;
  • -p 25565:25565:暴露游戏端口;
  • -v ~/docker-data/minecraft/vanilla:/data
    • 容器内 /data 是服务端所有文件(世界存档 / server.properties / ops.json 等)的目录;
    • 挂到宿主机做持久化。

查看日志:

Terminal window
docker logs -f mc-vanilla

看到类似 Done (xx.xx s)! For help, type "help" 就说明服已正常启动。

以后只要不删除 ~/docker-data/minecraft/vanilla,换机器只需:

  1. 装 Docker;
  2. 拷贝这个目录;
  3. 再跑一遍 docker rundocker-compose

服务器就 “原封不动” 地迁移过去了。

四、用 docker-compose 管理原版核心#

推荐用 docker-compose 管理所有 MC 服。

~/docker-data/minecraft 下新建 docker-compose.yml(先从一个原版服开始):

version: "3.9"
services:
mc-vanilla:
image: itzg/minecraft-server:latest
container_name: mc-vanilla
restart: unless-stopped
ports:
- "25565:25565"
environment:
EULA: "TRUE"
VERSION: "1.20.4"
MEMORY: "4G"
# 设置简单白名单/在线模式等也可以用 env:
# ONLINE_MODE: "TRUE"
# ENABLE_WHITELIST: "TRUE"
volumes:
- ./vanilla:/data

同目录执行:

Terminal window
docker compose up -d
docker compose logs -f mc-vanilla

停服:

Terminal window
docker compose down

注意:down 不会删卷,只要不加 -v,世界存档和配置都在 ./vanilla 中安全存放。

五、Paper 服务器(推荐生产用):高性能原版体验#

Paper 是基于 Spigot 的高性能分支,特点:

  • 更高 TPS,更好性能优化;
  • 更丰富的配置项;
  • 插件生态兼容 Spigot/Bukkit;
  • 适合绝大多数 “生存 + 插件” 服。

itzg/minecraft-server 中,只需要把 TYPE 改为 PAPER 即可。

docker-compose.yml 中新增一个服务:

mc-paper:
image: itzg/minecraft-server:latest
container_name: mc-paper
restart: unless-stopped
ports:
- "25566:25565" # 宿主 25566 -> 容器 25565
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "1.20.4"
MEMORY: "6G"
# 开启白名单(可选)
# ENABLE_WHITELIST: "TRUE"
# 设置服务器图标/描述等也可通过挂载文件解决
volumes:
- ./paper:/data

说明:

  • 宿主机端口 25566 对应容器 25565,这样不会和原版服冲突;
  • 你可以同时开原版和 Paper,分别用 25565 和 25566。

启动:

Terminal window
docker compose up -d mc-paper
docker compose logs -f mc-paper

Paper 标签页中你可以找到更多配置文件:

  • paper.yml
  • spigot.yml
  • bukkit.yml

都位于 ./paper 目录里,可以按需要优化。

六、Spigot 服务器:插件服的经典选择#

Spigot 是 Bukkit 的一个高性能分支,很多插件仍然把它当作最基础的服务端。

依然可以通过 TYPE=SPIGOT 方式部署:

mc-spigot:
image: itzg/minecraft-server:latest
container_name: mc-spigot
restart: unless-stopped
ports:
- "25567:25565"
environment:
EULA: "TRUE"
TYPE: "SPIGOT"
VERSION: "1.20.4"
MEMORY: "4G"
volumes:
- ./spigot:/data

Spigot 和 Paper 的主要区别在于:

  • Paper 补充了更多优化和配置项;
  • Spigot 更趋近于 “官方改的稳定性能版”。

现在主流更推荐 Paper 作为性能服首选,Spigot 可以作为兼容性备选。

七、Forge 模组服:大型模组生存#

Forge 是老牌模组框架,很多经典整合包都基于 Forge。

itzg/minecraft-server 支持 TYPE=FORGE

mc-forge:
image: itzg/minecraft-server:latest
container_name: mc-forge
restart: unless-stopped
ports:
- "25568:25565"
environment:
EULA: "TRUE"
TYPE: "FORGE"
VERSION: "1.16.5" # 例如多数整合包使用的经典版本
MEMORY: "8G" # 模组多时适当给大一点
# FORGE_VERSION: "" # 如需特定 Forge 构建可加
volumes:
- ./forge:/data

启动后:

  • Forge 会在 /data/mods/data/config 等目录中生成文件;
  • 你可以把 .jar 模组放到宿主机的 ./forge/mods 中;
  • 对应配置文件放 ./forge/config

提醒:Forge 模组服对内存和 CPU 要求会明显高于纯原版,越多模组越夸张。

八、Fabric 模组服:轻量级新秀#

Fabric 是另一种模组 API,相对 Forge 更轻量、更新速度更快。

同样通过 TYPE=FABRIC 部署:

mc-fabric:
image: itzg/minecraft-server:latest
container_name: mc-fabric
restart: unless-stopped
ports:
- "25569:25565"
environment:
EULA: "TRUE"
TYPE: "FABRIC"
VERSION: "1.20.4"
MEMORY: "6G"
# FABRIC_LOADER_VERSION: "" # 如需特定 Loader 可指定
volumes:
- ./fabric:/data

Fabric 模组服的要点:

  • 模组同样放在 /data/mods
  • 很多 Fabric 模组和 Forge 不兼容,整合包时要注意区分;
  • 有不少性能优化类 Fabric 模组(如 Lithium、Phosphor 等),适合做 “轻量高性能模组服”。

九、BungeeCord / Waterfall:多服代理与跨服传送#

当你想要:

  • 一个统一入口 IP / 端口;
  • 后面挂多个子服(大厅服、生存服、创造服、小游戏服……);

这时就需要一个代理层:BungeeCord / Waterfall / Velocity 等。

这里以 itzg/bungeecord 为例搭建一个 BungeeCord 节点。

1. 自定义 Docker 网络#

为了让 BungeeCord 和各子服通过容器名互通,先在 compose 中定义一个网络:

networks:
minecraft-net:
driver: bridge

2. BungeeCord 服务#

docker-compose.yml 中添加:

bungeecord:
image: itzg/bungeecord:latest
container_name: mc-bungee
restart: unless-stopped
ports:
- "25565:25577" # 默认 Bungee 监听 25577,我们映射到宿主 25565
environment:
# 按需设置最大内存等
JAVA_OPTS: "-Xmx1G"
volumes:
- ./bungee:/server
networks:
- minecraft-net

说明:

  • Bungee 默认监听 25577 端口,我们把它映射到宿主 25565;
  • 日后玩家只需要连你的 IP:25565 即可,由 Bungee 根据配置分发。

3. 后端子服示例(挂到 Bungee 上)#

对于后端子服,不必再把端口映射到宿主机,只需要暴露在 Docker 网络中即可。

比如把前面的 Paper 服调整为后端服:

mc-paper-backend:
image: itzg/minecraft-server:latest
container_name: mc-paper-backend
restart: unless-stopped
environment:
EULA: "TRUE"
TYPE: "PAPER"
VERSION: "1.20.4"
MEMORY: "6G"
ONLINE_MODE: "FALSE" # 重要:后端服关闭正版验证,由 Bungee 统一处理
ENABLE_RCON: "FALSE"
volumes:
- ./paper-backend:/data
networks:
- minecraft-net

几个关键点:

  • 后端 Paper 服不需要 ports(不映射到宿主);
  • 必须 ONLINE_MODE=FALSE,否则和 Bungee 的验证会冲突;
  • ./bungeeconfig.yml 中配置后端:
    • address: mc-paper-backend:25565(容器名 + 端口)。

Bungee/Waterfall/Velocity 更详细的权限、跨服传送、子服管理配置本身就能写一篇,从 Docker 的角度,核心在于:端口 / 在线模式 / Docker 网络 / 配置文件挂载

十、常用环境变量与配置技巧#

itzg/minecraft-server 支持的大量环境变量,这里列几个最常用的:

  • 基础
    • EULA:必须为 TRUE
    • VERSION:MC 版本;
    • TYPEVANILLA / PAPER / SPIGOT / FORGE / FABRIC 等;
    • MEMORY:分配给 JVM 的内存,如 4G
  • 玩家与验证
    • ONLINE_MODETRUE / FALSE,是否启用正版验证(Bungee 后端需关掉);
    • ENABLE_WHITELISTTRUE 时启用白名单;
    • WHITELIST:逗号分隔玩家名列表;
    • OPS:逗号分隔 OP 玩家,例如 OPS: "PlayerA,PlayerB"
  • RCON / 控制
    • ENABLE_RCON:是否启用远程控制;
    • RCON_PASSWORD:RCON 密码;
    • RCON_PORT:RCON 端口;
  • 世界与游戏规则(部分选项也可以通过 server.properties 或命令控制):
    • DIFFICULTYpeaceful / easy / normal / hard
    • ALLOW_NETHERENABLE_COMMAND_BLOCKSPAWN_ANIMALS 等;
  • 高级 JVM 配置
    • JVM_OPTS / JVM_XX_OPTS:加 GC、压缩指针等参数;
    • 如:JVM_OPTS: "-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=200"

此外:

  • 如果你更习惯直接编辑 server.properties,完全可以在第一次启动后:
    • 停服;
    • 修改 ./xxx/server.properties
    • 再起服。

Docker 只是帮你封装了运行环境,并不限制你手动改配置。

十一、备份、迁移与升级#

1. 备份#

备份最简单粗暴的方式就是 打包数据目录

Terminal window
cd ~/docker-data/minecraft
tar czf mc-vanilla-backup-$(date +%Y%m%d).tar.gz ./vanilla
tar czf mc-paper-backup-$(date +%Y%m%d).tar.gz ./paper

建议:

  • 备份前先停服或至少让世界保存一次(/save-all);
  • 把压缩包上传到其他机器或对象存储;
  • 重要模组服 / 大型建筑服可以设定定期备份计划。

2. 迁移#

迁移步骤通常是:

  1. 在新机器装 Docker;

  2. ~/docker-data/minecraft 整个目录拷贝过来;

  3. 使用同一个 docker-compose.yml

  4. 在新机器执行:

    Terminal window
    docker compose up -d
  5. 等待启动完成后,玩家改连新 IP 即可。

3. 升级#

升级包括:

  • 升级镜像(JVM / 核心);
  • 升级 MC 版本。

升级镜像

  1. 修改 docker-compose.yml 中的 image 标签(如从 latest 改为 java17-XXXX);

  2. 执行:

    Terminal window
    docker compose pull
    docker compose up -d

升级 MC 版本(比如从 1.19.4 到 1.20.4):

  1. 确保备份完成;
  2. VERSION 环境变量;
  3. 启动服务端,看控制台是否提示世界升级;
  4. 升级后如发现严重问题,可以用备份回滚。

对于有大量模组的 Forge/Fabric 服,升级版本属于高风险操作,通常建议新开一套世界慢慢迁移。

十二、常见问题与排查思路#

1. 容器启动即退出 / 不断重启#

常见原因:

  • 没有设置 EULA=TRUE
  • 环境变量配置错误(版本和类型不兼容、拼写错误);
  • 映射目录权限问题(尤其是 Linux 上);
  • 模组冲突或插件错误导致服务端崩溃。

排查命令:

Terminal window
docker logs mc-xxx

根据控制台输出解决:

  • 看有没有 “You need to agree to the EULA”;
  • 看是否有某个模组 / 插件报错堆栈。

2. 玩家连不上服务器#

检查顺序:

  1. 服务端是否真的在监听端口:

    Terminal window
    docker ps
    ss -tulnp | grep 25565
  2. 云服务器上安全组是否放行了对应端口;

  3. 家宽下路由器端口映射是否正确,公网 IP 是否为运营商 CGNAT;

  4. 客户端是否填写了正确的 IP:端口,没写错号。

3. 延迟高 / TPS 低#

考虑因素:

  • 硬件资源是否够(CPU / 内存 / 磁盘 IO);
  • 模组/插件是否过多;
  • 玩家是否分布太广(跨洲连线);
  • 是否同时跑了过多世界 / 维度。

优化建议:

  • 使用 Paper 替代纯原版;
  • 合理调整 view-distance / simulation-distance
  • 使用性能优化插件 / 模组(如 Paper 的相关插件、Fabric 的优化模组);
  • 考虑增加节点或拆分为多个子服,通过 Bungee 连接。

4. 世界损坏 / 崩档#

常见情形:

  • 硬关机;
  • 磁盘写满;
  • 模组写存档时崩溃。

处理思路:

  • 先备份当前目录(即便已损坏);
  • 如果有近期备份,尝试回滚;
  • 有些情况下可以通过 region 编辑器(如 MCA Selector)修复局部区域,但这已经属于高级操作。

十三、从零搭满:Minecraft + Docker 部署清单#

最后总结一份完整 checklist,作为今后开服时的速查表:

  1. 选定机器(云服务器 / 家宽主机),安装 Docker;
  2. 规划好端口(25565 主入口 + 若干子服端口);
  3. 在宿主创建 ~/docker-data/minecraft,并规划好子目录结构;
  4. 拉取 itzg/minecraft-serveritzg/bungeecord 镜像;
  5. 写一个 docker-compose.yml
    • 原版服(TYPE=VANILLA);
    • Paper / Spigot 插件服;
    • Forge / Fabric 模组服;
    • 如需多服入口,增加 BungeeCord 服务和后台子服;
  6. 配置必要的环境变量:EULAVERSIONTYPEMEMORYONLINE_MODE、白名单/OPS 等;
  7. docker compose up -d 启动,查看日志确保无报错;
  8. 去各服的数据目录下微调 server.propertiespaper.yml、模组配置等;
  9. 对外公布 IP/端口,测试多端(PC/移动)连接;
  10. 配置定期备份与监控,升级前一定先备份,必要时用 Bungee 拆分压力。

做到这里,你就拥有了一套高度可控、易迁移、易扩展的 Minecraft Docker 服主架构:
无论是一个安静的小伙伴生存服,还是多服联机的大型社区,都可以在这套基础上按需堆砌与优化,而不必每次都从手动装 Java 和 server.jar 开始折腾。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
用 Docker 部署 Minecraft 服务器:原版 / Paper / Spigot / Forge / Fabric / BungeeCord 全面实战
https://firefly.cuteleaf.cn/posts/docker-minecraft-deploy/
作者
Airio_
发布于
2026-02-26
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Airio_
Hello, I'm Airio_.
公告
欢迎来到OfoCa Space。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
6
分类
1
标签
16
总字数
18,733
运行时长
0
最后活动
0 天前

目录