一份compose配置跑起Minecraft Forge服务器:从空目录到可进服
【免费下载链接】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-server 镜像在容器启动时自动下载并装好指定版本的 Minecraft Forge 服务端,免去手动装 Java、下服务包的麻烦。本文演示如何用一份 compose 配置,把 Forge 1.20.1 服务器跑起来并确认玩家能正常连接。
动手前先核对环境
- 一台能装 Docker 的机器(Linux 主机或 TrueNAS Scale 这类 NAS),已安装 docker compose
- 内存至少 4GB,5 人以上联机建议 8GB
- 预留 10GB 以上磁盘,存放服务端文件与世界数据
- 使用的镜像为
itzg/minecraft-server,官方入口见 docs/index.md
先理解数据怎么流动
动手前花 30 秒建立心智模型,后面排错会容易很多:
- 服务端所有文件都在容器内
/data目录,绑定挂载到主机的./data目录,容器删了世界数据还在 - 每次启动时,入口脚本按环境变量自动下载并安装/升级 Minecraft 与 Forge,不需要手动维护安装器
- 客户端连接的是主机 IP 的 25565 端口,再由 Docker 转发给容器内的服务端
下图展示了主机端口与容器端口的对应关系:
准备目录并编写 compose 配置
在主机上任选位置建目录,data和mods两个子目录由挂载自动创建:
mkdir minecraft-forge && cd minecraft-forge把以下内容存为compose.yaml:
services: mc: image: itzg/minecraft-server ports: - "25565:25565" environment: EULA: "TRUE" TYPE: FORGE VERSION: "1.20.1" MEMORY: "4G" volumes: - ./data:/data - ./mods:/mods:ro restart: unless-stopped这段配置里最关键的设置是TYPE: FORGE和VERSION:前者决定用 Forge 加载器而不是原版,后者指定 Minecraft 版本,Forge 版本默认取该 MC 版本推荐的稳定版;想用特定版本可加FORGE_VERSION: "47.1.0"。./mods:/mods:ro表示把 mods 目录以只读方式挂进容器,启动时其中的 jar 会被拷贝进服务端,日常放 mod 文件只操作主机目录即可。全部可配置变量汇总在 docs/variables.md,仓库自带的 Forge 示例见 examples/docker-compose-forge.yml。
如果习惯docker run写法,这张图对照了两种形式每个参数的对应关系:

启动容器并验证成功标志
docker compose up -d docker compose logs -f首次启动会比较久:下载 Forge 安装器 → 安装 → 生成世界。成功的标志是日志出现这样一行:
Done (t=xx.xxxs)! For help, type "help"随后打开游戏客户端,"添加服务器"填入主机 IP 与 25565 端口,列表里能看到服务器名称即部署完成。之后升级版本只需改VERSION再docker compose up -d,容器会自行完成服务端升级。
两个高频进阶能力
- 远程发命令(RCON):镜像默认启用 RCON。需要不打开控制台就执行
stop、踢人、改 MOTD 时,设置RCON_PASSWORD后用容器内的rcon-cli操作,方式见 docs/sending-commands/commands.md。 - 无玩家自动停止:跑在 NAS 上不想让它空转时,加
ENABLE_AUTOSTOP: "TRUE"和AUTOSTOP_TIMEOUT_EST(最后一人离线后多久停服),并记得把 restart 策略设为no,完整参数说明在 docs/misc/autopause-autostop/autostop.md。
启动排错速查
| 现象 | 原因 | 解法 |
|---|---|---|
| Forge 安装报错或反复重装 | 安装过程不完整 | 临时加FORGE_FORCE_REINSTALL: "true",启动成功后删除该变量 |
| 卡在 "Changing ownership of /data" | 某些文件系统(常见于 NAS)上做属主检查很慢 | 设置SKIP_CHOWN_DATA: "true" |
| 提示端口 25565 已被占用 | 主机端口被其他容器占走 | 改映射为"26000:25565",客户端连 26000 端口 |
| 启动行为异常但看不出原因 | 默认日志较精简 | 加DEBUG: "true"输出详细启动日志,更多排错手段见 docs/misc/troubleshooting.md |
为什么推荐这种部署方式
整个服务端被隔离在一个容器里,主机不沾任何 Java 依赖;配置全部写在 compose 文件中,换机器时拷贝目录即可完整重建;世界数据落在自己控制的目录,备份就是打包一个文件夹。想让服务器更省心,可以先从 examples/autostop/compose.yml 里抄一份自动停止配置,照着本文的步骤再跑一遍,你会对这套流程更有把握。
【免费下载链接】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),仅供参考