Docker实战:10分钟搭建带Mod的MC服务器
想和朋友联机玩Minecraft却不会开服?本教程带你用Docker Compose在10分钟内从零搭建服务器,支持自动升级、Mod一键加载与版本切换。无需手动配置Java、下载服务端或处理依赖,掌握容器化部署与性能调优技巧,今晚就能开服畅玩。

10 分钟用 Docker 搭建 Minecraft 服务器:从开服到 Mod 管理全记录
想和朋友一起开麦下副本、搞建筑,却苦于不会搭建 Minecraft 服务器?
我以前也干过这事:手动装 JDK、去 Mojang 官网下服务端 jar、配 eula.txt、折腾内网穿透、调 JVM 参数、手动丢 Mod 进 mods 文件夹……一顿操作下来半天过去了,服务器还没跑起来。后来用上容器化,我才发现原来开服可以像启动一个 Web 服务一样简单。
今天带你用 GitHub 上 14k+ 星的 itzg/docker-minecraft-server 镜像,10 分钟搭一台随时可升降配、自带自动升级、支持一键加载 Mod 的 MC 服务器。学完这篇,你不仅能和朋友快乐联机,还能顺手掌握 Docker Compose 编排、容器数据卷持久化、环境变量配置等实战技能。
前置条件
- 一台 Linux 服务器(Ubuntu 20.04+ / CentOS 8+ 均可,本地 VM 也行)
- 已安装 Docker 和 Docker Compose V2
- 了解基本的 Docker 概念(镜像、容器、端口映射、数据卷)
- 有 Java 版 Minecraft 客户端(和服务器版本一致即可)
如果你的机器还没装 Docker,官方一键脚本最省心:
bash
curl -fsSL https://get.docker.com | sh
sudo systemctl enable docker && sudo systemctl start docker
快速上手:三步开服
第一步:编写 docker-compose.yml
不要直接用 docker run,用 Compose 声明式管理会省去后续大量麻烦。在项目目录下创建 docker-compose.yml:
yaml
version: '3.8'
services:
mc:
image: itzg/minecraft-server:latest
container_name: minecraft-server
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: PAPER
VERSION: "1.20.4"
MEMORY: 2G
volumes:
- ./data:/data
restart: unless-stopped
为什么这么写?
EULA: "TRUE":Mojang 要求你同意最终用户许可协议,否则服务端会直接退出。这是必须项。TYPE: PAPER:原版服务端性能一般,Paper 是优化版,兼容插件且 TPS 更稳,开服首选。VERSION:指定 Minecraft 版本,镜像启动时会自动下载对应版本的服务端。MEMORY: 2G:JVM 堆内存上限。2G 够 5-10 人小服,人多或装 Mod 再加。volumes:/data是镜像内部的世界存档、配置、插件目录。映射到宿主机后,删容器不会丢档。restart: unless-stopped:服务器重启或容器意外退出时自动拉起,不用你半夜爬起来重启。
第二步:启动服务
bash
docker compose up -d
首次运行镜像会下载服务端 jar、生成初始配置,控制台会输出类似:
[init] Resolved version 1.20.4 to 1.20.4
[init] Downloading PaperMC server jar...
[init] Running server: java -Xms2G -Xmx2G -jar paper-1.20.4.jar
[Server thread/INFO] Starting minecraft server version 1.20.4
看到 Done 或 Server started 就代表开服成功了。
第三步:加入游戏
打开 Minecraft 客户端,选择与你服务端一致的版本,进入「多人游戏」→「添加服务器」:
服务器地址: 你的服务器IP:25565
点「完成」就能连进去了。如果连不上,检查防火墙是否放行了 25565 端口。
实战示例:部署带 Mod 的整合包服务器
上面是基础开服,但很多玩家喜欢带 Mod 的玩法。手动下 Mod、处理依赖冲突很痛苦,这个镜像自带 Mod 管理机制。
场景:用 Forge 跑一个轻量科技 Mod 包
修改 docker-compose.yml 的 environment 部分:
yaml
environment:
EULA: "TRUE"
TYPE: FORGE
VERSION: "1.20.1"
MEMORY: 4G
MODS: |
https://cdn.example.com/mods/jei-1.20.1.jar
https://cdn.example.com/mods/mekanism-1.20.1.jar
REMOVE_OLD_MODS: "TRUE"
关键配置解读:
TYPE: FORGE:自动下载并安装 Forge Mod 加载器。MODS:填 Mod jar 的下载链接,镜像启动时会自动拉取并放入 mods 目录。支持换行填多个。REMOVE_OLD_MODS: "TRUE":每次启动清理旧 Mod,避免版本冲突堆积垃圾文件。
启动命令不变:
bash
docker compose up -d
镜像日志会显示:
[init] Downloading mod: jei-1.20.1.jar
[init] Downloading mod: mekanism-1.20.1.jar
[init] Starting Forge server...
如果后续要更新 Mod,只需改 MODS 链接或版本号,然后 docker compose up -d 重新拉起即可。不需要 SSH 进服务器手动替换文件。
进阶:一键加载 CurseForge / Modrinth 整合包
该项目还支持直接从 CurseForge 或 Modrinth 拉取完整整合包,只需添加环境变量:
yaml
CF_SLUG: "my-modpack"
CF_FILE_ID: "1234567"
# 或 Modrinth:
MODRINTH_PROJECT: "my-project"
MODRINTH_VERSION: "1.2.3"
镜像会自动解压、安装依赖、配置 Mod 和 config,真正实现「配置即开服」。
踩坑提醒 & 常见问题
1. 内存不够,服务器频繁崩溃
症状:日志报 java.lang.OutOfMemoryError: GC overhead limit exceeded 或 TPS 掉到个位数。
解法:调大 MEMORY,同时开启 Aikar 的 JVM 优化参数:
yaml
MEMORY: 6G
USE_AIKAR_FLAGS: "TRUE"
Aikar Flags 是 MC 社区广泛验证过的 GC 优化方案,能显著减少卡顿。
2. 容器重启后世界丢了
原因:没有正确映射数据卷,或映射路径写错。
解法:确保 volumes 配置正确,并且不要随意删除宿主机上的 data 目录。每次启动前检查:
bash
ls -la ./data/world/
有 level.dat 文件说明世界数据还在。
3. 版本切换后插件不兼容
原因:你从 1.20.1 切到 1.20.4 时,旧版插件的 API 可能已变更。
解法:换版本时,建议清空 data/plugins 目录(先备份),重新下载对应版本的插件。或者设置:
yaml
FORCE_REDOWNLOAD: "FALSE"
避免每次启动都覆盖已有文件。
总结
回顾一下今天的步骤:
- 写 Compose 文件 → 声明镜像、端口、环境变量、数据卷
- 一键启动 → 自动下载服务端、初始化世界、开服
- 按需加载 Mod → 用 MODS 变量或整合包配置,免去手动部署
- 性能调优 → Aikar Flags + 合理内存配置,稳如老狗
这个镜像把开服过程中最繁琐的部分——下载服务端、处理依赖、版本管理、Mod 装载——全部封装成了环境变量。你不再需要写脚本、查文档、手动排错,改配置、重启容器就是全部操作。
下一步建议:
- 尝试用 Nginx 反代 Web 管理面板(如 rcon-cli + Web UI)
- 研究
BACKUP和RESTORE环境变量实现自动备份 - 在多节点上用 Docker Swarm 或 K8s 编排高可用 MC 集群
开服不难,难的是开始。现在就去拉一个 Compose 文件,今晚就能和朋友一起探索你的世界了。有问题欢迎在评论区交流,我会挑典型问题专门写篇进阶指南。