苏坡爱豆
发布于 2025-10-10 / 4 阅读
0

🎮 我的世界Docker容器部署精简指南

🧱 使用 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 文件中需要关注的核心环境变量。

📌 基础与核心配置

变量名

说明

示例值

EULA

必须设置,同意 Minecraft 最终用户许可协议。

"TRUE"

TYPE

服务器类型,对于自定义整合包,我们设置为 CUSTOM

"CUSTOM"

CUSTOM_SERVER

本方案的核心,直接指向整合包的启动脚本。

"/data/run.sh"

MEMORY

分配给服务器的内存大小,根据整合包规模和玩家数调整。

"12G"

TZ

时区设置,确保日志时间正确。

"Asia/Shanghai"

⚙️ 功能与优化配置

变量名

说明

示例值

ENABLE_AUTOPAUSE

是否开启自动暂停功能(镜像会自动处理看门狗问题)。

"true"

VIEW_DISTANCE

(带宽优化) 视距,服务器发送给玩家的区块半径。推荐 6-8

"8"

SIMULATION_DISTANCE

(带宽优化) 模拟距离,服务器处理实体的半径。推荐 6-8

"8"

ENABLE_RCON

是否开启远程控制台,是在容器内使用 rcon-cli​ 的前提

"true"

RCON_PASSWORD

RCON 连接密码,必须设置

"your_strong_password_here"

🐳 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 等)进入容器内部的控制台来发送管理指令。

操作步骤

  1. 在你的 Docker 管理界面上,找到正在运行的 Minecraft 容器,点击并选择 “控制台”“Console” (有时也叫 “Exec Shell”)。

  2. 进入控制台后,你就处在容器的命令行环境中了。itzg/minecraft-server​ 镜像内置了 rcon-cli 工具,可以直接使用。

  3. 在控制台里输入以下指令即可(前提是 ENABLE_RCON​ 已设为 true 并配置了密码):

    # 格式: rcon-cli -P <RCON密码> "<指令>"
    # 在容器内操作,不需要IP地址和端口号,工具会自动连接到 localhost:25575
    
    rcon-cli -P "your_strong_password_here" "gamerule playersSleepingPercentage 1"
    

    这个例子中的指令 gamerule playersSleepingPercentage 1 的作用是设置仅需一个玩家睡觉即可跳过夜晚。你可以把引号内的部分换成任何你想执行的游戏指令。