🧱 使用 itzg/minecraft-server 镜像运行并优化自定义整合包
🔧 1. 核心优势
采用 itzg/minecraft-server 镜像是目前功能最全面的 Docker 化 Minecraft 服务端方案之一。其突出的优点是:
⚡ 自动暂停 (Autopause) :当服务器上没有玩家在线时,它可以自动挂起游戏主进程,极大地节省 CPU 算力。同时,Java 虚拟机保持运行,游戏数据保留在内存中,确保玩家可以随时快速重连。这对于资源有限的个人服务器或 NAS 设备尤其友好。
🛠️ 2. 配置思路
对于已经准备好的自定义整合包(如使用 NeoForge, Fabric 等),核心思路是绕过容器的自动安装流程,让它直接执行整合包自带的启动脚本(通常是 run.sh)。
我们通过实践确定的最直接有效的方法是:
对于已经准备好的自定义整合包(如使用 NeoForge, Fabric 等),核心思路是绕过容器的自动安装流程,让它直接执行整合包自带的启动脚本(通常是 run.sh)。
📌 其他选项简要说明:
若使用官方Vanilla核心,可设置
TYPE: "VANILLA" 并通过VERSION指定版本。若使用 Forge 整合包但希望由容器自动下载安装,可设置
TYPE: "FORGE" 并留空CUSTOM_SERVER。更多类型支持详见 itzg/docker-minecraft-server 文档
示例片段(来自 docker-compose.yml):
environment:
TYPE: "CUSTOM"
CUSTOM_SERVER: "/data/run.sh" # 👈 此处为核心配置
⚠️ 3. 重点解析:自动暂停 (Autopause) 与“看门狗”
这是一个需要特别注意的关键知识点。
🐶 “看门狗” (Watchdog) 是什么? Minecraft 服务端自带一个监控机制,如果服务器主进程卡死(长时间没有响应),“看门狗”会认为服务器已崩溃并强行重启它。这个定期检查的机制,就是我们俗称的“喂狗”。
💥 与 Autopause 的冲突: 当
ENABLE_AUTOPAUSE开启后,服务器会在无人时主动“冻结”进程以节省CPU。这会导致正常的服务器无法“喂狗”,从而被“看门狗”误杀并重启。
✅ 自动化解决方案(划重点) :
您无需手动修改任何配置文件。itzg/minecraft-server 镜像已经考虑到了这一点。当您在环境变量中设置ENABLE_AUTOPAUSE: 'true' 时,容器的启动脚本会自动将服务器配置文件中的max-tick-time 设置为-1,从而彻底禁用“看门狗”。您唯一要做的,就是在需要时开启
ENABLE_AUTOPAUSE,其他一切都会被自动处理。
如果未生效,这是要检查的一个点。请注意⚠️⚠️
📋 4. 关键参数与带宽优化
以下是在 docker-compose.yml 文件中需要关注的核心环境变量。
📌 基础与核心配置
⚙️ 功能与优化配置
🐳 5. Docker Compose 最置示例
这是一个整合了所有讨论细节的 docker-compose.yml 模板。
version: "3.8"
services:
minecraft:
image: itzg/minecraft-server
container_name: minecraft-custom-server # 自定义容器名
restart: unless-stopped
environment:
# --- 核心配置 ---
EULA: "TRUE"
TYPE: "CUSTOM"
CUSTOM_SERVER: "/data/run.sh" # 直接指向整合包的启动脚本
# --- 功能配置 ---
ENABLE_AUTOPAUSE: "true" # 开启自动暂停功能 (镜像会自动处理看门狗)
# --- 性能与版本配置 ---
MEMORY: "12G" # 根据你的服务器内存和整合包大小调整
VERSION: "1.21" # 你的游戏版本 (建议填写)
TZ: "Asia/Shanghai" # 设置时区
# --- 带宽与性能优化 ---
VIEW_DISTANCE: "8" # 视距 (推荐 6-8, 默认 10)
SIMULATION_DISTANCE: "8" # 模拟距离 (推荐 6-8, 默认 10)
# NETWORK_COMPRESSION_THRESHOLD: "256" # 网络压缩阈值 (可选, 默认值256通常很好)
# --- 游戏性配置 (示例) ---
MOTD: "欢迎来到我的自定义服务器!" # 服务器在列表中的欢迎语
MAX_PLAYERS: "20"
DIFFICULTY: "normal"
# --- 远程管理 (RCON) 配置 ---
ENABLE_RCON: "true"
RCON_PASSWORD: "your_strong_password_here" # !!! 请务必修改为一个强密码 !!!
volumes:
# 将宿主机的服务器文件目录挂载到容器的 /data 目录
# !!! 请将下面的路径修改为您在 Unraid 或其他宿主机上的真实路径 !!!
- "/mnt/user/appdata/minecraft/YourServerPack:/data"
ports:
# 映射游戏端口
- "25565:25565/tcp"
- "25565:25565/udp"
# RCON 端口,即使只在容器内使用,服务也需要开启此端口
- "25575:25575/tcp"
💬 6. 附:通过容器控制台发送指令
当服务器成功运行后,你可以直接通过 Docker 管理界面(如 Unraid UI、Portainer 等)进入容器内部的控制台来发送管理指令。
操作步骤:
在你的 Docker 管理界面上,找到正在运行的 Minecraft 容器,点击并选择 “控制台” 或 “Console” (有时也叫 “Exec Shell”)。
进入控制台后,你就处在容器的命令行环境中了。
itzg/minecraft-server 镜像内置了rcon-cli工具,可以直接使用。在控制台里输入以下指令即可(前提是
ENABLE_RCON 已设为true并配置了密码):# 格式: rcon-cli -P <RCON密码> "<指令>" # 在容器内操作,不需要IP地址和端口号,工具会自动连接到 localhost:25575 rcon-cli -P "your_strong_password_here" "gamerule playersSleepingPercentage 1"这个例子中的指令
gamerule playersSleepingPercentage 1的作用是设置仅需一个玩家睡觉即可跳过夜晚。你可以把引号内的部分换成任何你想执行的游戏指令。