Docker 部署 Minecraft 1.16.5 Forge 服务器笔记
注:本篇文章是在Ubuntu24版本下做出的部署。如果目标机器是其他版本的Linux,该篇教程大体仍适用。只是个别命令有所不同。也就是说你遇到报错的命令就问问ai在你的服务器系统版本下对应的命令是什么即可。
作者QQ:2774118934 QQ交流群:1028181089
Docker 部署 Minecraft 1.16.5 Forge 服务器笔记
一、目标
搭建:
-
Minecraft Java Edition
-
Minecraft 版本:1.16.5(对应Java8)
-
Forge版本:36.2.x
-
Docker运行
-
使用自己的世界存档
-
支持 Forge Mod
-
局域网 / Tailscale 联机
在该篇文章中的联机方式是,客户端与服务器处于同一虚拟局域网环境下。如需搭建公网环境的服务器,需要你有一台公网ip服务器,或一台内网ip服务器+一个域名(详见域名访问内网服务器 )
二、准备工作
1. 安装 Docker
如果你不知道什么是docker?、
连目标程序和依赖环境打包在一起能让你直接下载的就是一个docker容器。我们只需要部署MC打包好的docker容器即可
如果你了解了,但是没有docker?
如果你已经安装过docker?(如果在第三步发现无法正常下载镜像也可以去看上一条的安装docker)
确认 Docker 正常:
docker --version
查看运行状态:
docker ps
2. 创建服务器数据目录
建议:
sudo mkdir -p /opt/minecraft
目录结构:(剩下的不需要你手动创建)
/opt/minecraft
│
├── world # 世界存档
├── mods # Mod
├── config # Mod配置
├── server.properties # 服务器配置
└── eula.txt
Docker 会把这个目录映射到容器:(看不懂也没关系)
宿主机:
/opt/minecraft
↓
容器:
/data
这样映射的好处是,即使你把docker容器删除了,你的地图存档也不会被删除
三、使用 Java 8 镜像创建 Forge 1.16.5 服务器
Minecraft 1.16.5 Forge 使用 Java 8。
创建:
docker run -d \
--name minecraft-forge-1.16.5 \
--restart unless-stopped \
-p 25565:25565 \
-e EULA=TRUE \
-e TYPE=FORGE \
-e VERSION=1.16.5 \
-e MEMORY=4G \
-v /opt/minecraft:/data \
itzg/minecraft-server:java8
参数说明:
| 参数 | 作用 |
|---|---|
TYPE=FORGE |
启动Forge服务器 |
VERSION=1.16.5 |
Minecraft版本 |
MEMORY=4G |
分配4GB内存 (一定要按你需要调整,推荐为你服务器内存的1/2或1/4) 4G内存分配足够5人游玩 |
25565:25565 |
Minecraft端口(不建议更改,因为比较方便) |
/opt/minecraft:/data |
开启目录映射,保存地图和配置 |
java8 |
使用Java 8 |
--name |
指定容器名,后面stop、start、restart都需要这个容器名。注:可以用tab补全 |
这里一定要注意结尾使用的Java版本。如果不显式指明Java版本的标签,docker容器会默认使用Java25,可能会导致Java版本不匹配的报错
| Minecraft版本 | 推荐Java版本 | 备注 |
|---|---|---|
| 1.0 - 1.12.2 | Java 8 | 老版本模组服(Forge)基本使用 Java 8 |
| 1.13 - 1.16.5 | Java 8 | 1.16.5 是大型模组服常见版本,Java 8 最稳定 |
| 1.17 - 1.17.1 | Java 16 | 官方开始要求更高版本 Java |
| 1.18 - 1.20.4 | Java 17 | 当前大量服务器、模组服使用版本 |
| 1.20.5 - 1.20.6 | Java 21 | 官方切换到 Java 21 |
| 1.21 - 当前版本 | Java 21 | 推荐使用 Java 21 LTS |
四、第一次启动
注:记住该条查看日志的命令,如果遇到一些问题,可能会频繁查看日志
查看日志:
docker logs -f minecraft-forge-1.16.5
正常启动:
看到:
Done (...)! For help, type "help"
说明服务器已经运行。
五、导入自己的地图
停止服务器:
docker stop minecraft-forge-1.16.5
查看地图文件夹下有没有内容
ls /opt/minecraft/world
如果没有任何输出,就是预期的结果。如果有输出,说明启动容器时自动给你初始化了一个世界。我们不需要这个世界,删去该文件夹用自己的地图覆盖即可
如果有输出(即容器初始化了世界) 就执行下面的命令。如果没有,则跳过
rm -rf /opt/minecraft/world
将你自己的地图移动并重命名为world ( <--必须是这个名字!)
假设你的地图在home目录下:
cd ~
把地图移动并重命名到目标目录:
mv MyMap /opt/minecraft/world
例如:
/opt/minecraft
│
└── world
├── region
├── playerdata
└── level.dat
重新启动:
docker start minecraft-forge-1.16.5
服务器会自动读取:
/data/world
也就是:
/opt/minecraft/world
然后执行命令观察日志,看有没有报错:
docker logs -f minecraft-forge-1.16.5
六、安装 Forge Mod
原则
不要直接复制客户端整个 mods 文件夹。
Mod 分三类:
1. 必须服务器 + 客户端都有
例如:
-
新方块
-
新物品
-
新生物
-
新维度
-
游戏机制修改
例如:
Twilight Forest
Create
Mekanism
服务器:
/opt/minecraft/mods
客户端:
.minecraft/mods
必须一致。
2. 只需要客户端
例如:
-
背包整理
-
UI增强
-
显示优化
例如:
InventoryProfilesNext
libIPN
只放客户端。
3. 只需要服务器
例如:
-
登录管理
-
服务端优化
-
管理工具
即:客户端的mod配置几乎不需要做出任何改变(即客户端mod+服务器全部mod)。
把服务器需要的mod复制出一份,并移动到/opt/minecraft/mods文件夹中即可。服务器需要哪个,根据上述自行判断
然后重启容器,载入mod
docker restart minecraft-forge-1.16.5
然后观察日志,看有没有报错
docker logs -f minecraft-forge-1.16.5
七、关闭正版验证(如果你想让没有正版账号的玩家进入的话)
如果你没有vim的话,你就下一个或者用nano、vi等平替
vim下载:
sudo apt install vim
然后编辑配置文件
vim /opt/minecraft/server.properties
把
online-mode=true
改为
online-mode=false
注:在使用vim时,你应该先按
i键进入编辑模式,然后再正常编辑配置。
想要保存并退出时,先按esc键,然后输入英文字符的:wq并回车
恭喜你,如果你到这里没有出现什么问题的话,就应该是配置好了(也许?可能?大概?没问题了吧)
八、连接服务器
- 直接在游戏中点多人游戏。
- 点击添加服务器。
- 直接输入你服务器的ip地址(或域名)
- 如果你使用的是默认的端口,即没有更改本教程的端口。就不需要输入端口号
日志里显示的
RCON running on 0.0.0.0:2557525575这个端口不是给玩家连接用的。玩家应该通过25565这个端口来连接。(如果没有修改端口则无需输入该端口号,直接输入IP或域名即可)
如果多人游戏被禁用了,需要下载[MOF]离线多人修正 (MultiOfflineFix)模组以解除禁用。
九、服务器管理(后续维护需要)
查看日志
docker logs -f minecraft-forge-1.16.5
重启服务器
docker restart minecraft-forge-1.16.5
查看资源
docker stats minecraft-forge-1.16.5
查看TPS
进入RCON:
docker exec -i minecraft-forge-1.16.5 rcon-cli
输入:
forge tps
正常:
TPS:20
十、遇到的问题与解决方法
坑1:Forge启动失败
现象:
日志:
java version 25.0.3
IllegalAccessError
SecureJarHandler
原因:
Minecraft 1.16.5 Forge 不支持 Java 25。
错误:
itzg/minecraft-server
默认使用新版Java。
解决:
使用:
itzg/minecraft-server:java8
不要使用:
-e JAVA_VERSION=8
这个不会改变镜像Java版本。
坑2:地图无法加载
原因:
地图必须放:
/opt/minecraft/world
不是:
/opt/minecraft/maps
Minecraft只读取:
world
坑3:客户端无法进入
错误:
mismatched mod list
例如:
Channels [structure_gel:main] rejected
原因:
客户端和服务器Mod不同。
解决:
检查:
服务器:
/opt/minecraft/mods
客户端:
.minecraft/mods
游戏逻辑Mod必须一致。
坑4:认为所有客户端Mod都要放服务器
错误做法:
直接复制:
.minecraft/mods
到服务器。
会导致:
-
客户端UI Mod启动失败
-
服务端加载客户端类报错
例如:
不要放:
InventoryProfilesNext
libIPN
坑5:登录失败 无效会话
错误:
Invalid session
原因:
Minecraft账号验证失败。
检查:
server.properties
正版:
online-mode=true
离线启动器:
online-mode=false
坑6:服务器卡顿判断错误
不要看到卡顿就加内存。
检查:
TPS:
forge tps
正常:
TPS 20
客户端:
F3:
FPS
服务器TPS正常但FPS低:
说明是客户端问题。
坑7:4G内存够不够?
轻量Forge:
4G
够用。
不要盲目增加。
Minecraft主要看:
-
单核CPU
-
TPS
-
GC
-
区块加载
不是单纯内存越大越好。

浙公网安备 33010602011771号