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 正常:

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并回车


恭喜你,如果你到这里没有出现什么问题的话,就应该是配置好了(也许?可能?大概?没问题了吧)

八、连接服务器

  1. 直接在游戏中点多人游戏。
  2. 点击添加服务器。
  3. 直接输入你服务器的ip地址(或域名)
  4. 如果你使用的是默认的端口,即没有更改本教程的端口。就不需要输入端口号

日志里显示的RCON running on 0.0.0.0:25575 25575这个端口不是给玩家连接用的。玩家应该通过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

  • 区块加载

不是单纯内存越大越好。

posted @ 2026-08-04 17:05  畅畅c  阅读(15)  评论(0)    收藏  举报