itzg/minecraft-server 环境变量配置实战:从最小启动到稳定运行的 Docker 部署手册
2026/9/12 20:37:10 网站建设 项目流程

itzg/minecraft-server 环境变量配置实战:从最小启动到稳定运行的 Docker 部署手册

【免费下载链接】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

itzg/minecraft-server 是自动安装、升级 Minecraft 版本与 Mod 包的服务器 Docker 镜像。你配 itzg/minecraft-server 环境变量,容器却起不来——多半卡在 EULA、TYPE 或内存参数上。

![itzg/minecraft-server 环境变量从 docker run 到 docker-compose 的对照示意图](https://raw.gitcode.com/GitHub_Trending/do/docker-minecraft-server/raw/91b98bcc7b55eb41c211b54706d5cd87911e8b8b/docs/img/Going from docker run to compose.drawio.png?utm_source=gitcode_repo_files)

让服务器先跑起来:最小启动集——EULA、TYPE 与数据卷

第一次部署,或者照抄网上的 compose 文件,容器起来两秒就退出,日志停在 "Please accept the Minecraft EULA"——这是最常见的开局。最小可运行的 compose 片段只需要这几个变量:

services: mc: image: itzg/minecraft-server ports: ["25565:25565"] volumes: ["./minecraft-data:/data"] environment: EULA: "TRUE" TYPE: "PAPER" VERSION: "1.20.4"

💡 为什么这么设:EULA 是法律前提,镜像首次启动会检查 eula.txt,没同意直接退出;TYPE 决定安装流程路由到哪个部署脚本(VANILLA、PAPER、SPIGOT、FORGE、NEOFORGE、FABRIC、QUILT、CUSTOM 都支持),写错会直接报错退出;VERSION 不写默认取最新稳定版,显式固定能避免某次意外升级把世界版本带跑。

⚠️ 易错点:/data 卷必须挂出去,否则容器重建后世界全丢;TYPE 和 MODPACK_PLATFORM 不要同时设置,跑模组包时二选一。


设置 JVM 内存让服务器不卡顿——MEMORY 一族加一套 GC 预设

裸装 vanilla 用默认 1G 够跑,但上线二十人、或者跑大型模组包时,默认内存会直接 OOM 被杀。这一组变量是性能基线,建议合并配置而不是零散试错:

environment: MEMORY: "2G" INIT_MEMORY: "2G" MAX_MEMORY: "6G" USE_MEOWICE_FLAGS: "true"
变量默认值说明
MEMORY1G通用内存上限,INIT/MAX 未设置时用它
INIT_MEMORY同 MEMORY对应 -Xms 初始堆大小
MAX_MEMORY同 MEMORY对应 -Xmx 最大堆大小
USE_AIKAR_FLAGSfalse一键套用 Aikar 的 GC 参数组合
USE_MEOWICE_FLAGSfalse面向 Java 17+ 的 GC 参数组合

💡 为什么这么设:INIT 小于 MAX 时 JVM 按需扩堆,适合内存紧张的机器;MeowIce 参数按内存规模自动调 G1 区域设置,从 2G 到 16G 的服务器都适用。两套 GC 预设只选一套,不要叠加。

⚠️ 易错点:MeowIce 参数在 Java 17 以下会自动回落到 Aikar,日志里会提示;MAX_MEMORY 要留给宿系统和 dockerd 余量,设成物理内存的 100% 必被 OOM。


定好玩法与玩家体验——模式、难度、种子和人数上限

开服给朋友玩之前,把规则定死,比事后反复改 server.properties 省心。这些变量会在每次启动时统一写入 server.properties:

environment: MODE: "survival" DIFFICULTY: "hard" MAX_PLAYERS: "20" SEED: "88237465" MOTD: "Paper 1.20 - 生存服"

💡 为什么这么设:SEED 固定后世界布局可复现,朋友想重开世界或建小号服都能对齐;MOTD 不设置时镜像会按 TYPE 生成一条默认横幅,设了就用你的。

⚠️ 易错点:镜像默认 OVERRIDE_SERVER_PROPERTIES=true,每次启动都会用环境变量覆盖 server.properties。你手动改过文件想让改动存活,要么把改动挪回环境变量,要么设 OVERRIDE_SERVER_PROPERTIES: "false"。


省心的运维三件套——自动暂停、日志滚动与健康检查

服务器 24 小时挂着,夜里没人在线时让它休眠、早上玩家上线自动唤醒,是省 CPU 最直接的招;日志方面,默认配置会往 latest.log 无限追加,滚动日志解决磁盘占用问题。

environment: ENABLE_AUTOPAUSE: "true" AUTOPAUSE_TIMEOUT_EST: "1800" ENABLE_ROLLING_LOGS: "true"

💡 为什么这么设:autopause 只是暂停进程而不是停止容器,1800 秒(30 分钟)无人在线即进入休眠,玩家重连自动恢复,比 ENABLE_AUTOSTOP 停掉整个容器更平滑;滚动日志按天压缩归档,最多保留 1000 个文件(ROLLING_LOG_MAX_FILES 可调)。

⚠️ 易错点:ENABLE_AUTOPAUSE 和 ENABLE_AUTOSTOP 互斥,同时为 true 容器直接退出;用 autopause 建议把 MAX_TICK_TIME 调大或设 -1,否则进程恢复时可能触发 Server Watchdog 把整个服重启。

健康检查是镜像内置的:启动脚本定义了 30 秒一次、2 分钟宽限期的 mc-health 检查,不需要额外配置,用docker ps看 (healthy) 状态即可;如果你的服务端端口不是 25565,记得同步设置 SERVER_PORT。


收紧安全边界——RCON、白名单和下载代理

要把服务器开放给非内网玩家,或者公司网络需要走代理下载版本文件,这一节涉及三件事。

environment: ENABLE_RCON: "true" RCON_PASSWORD: "your-secure-rcon-pass" RCON_PORT: "25575" ENABLE_WHITELIST: "true" WHITELIST: "alice,bob"

💡 为什么这么设:镜像默认 ENABLE_RCON=true 并自动生成随机密码,自己指定 RCON_PASSWORD 后密码就固定了,运维脚本不用每次去 /data 里的 .rcon-cli.env 翻密码;WHITELIST 是逗号分隔的玩家名列表,也可以用 WHITELIST_FILE 指向文件。

⚠️ 易错点:RCON 协议没有传输加密,RCON_PORT 只映射给可信网络;生产环境更稳的做法是用 RCON_PASSWORD_FILE 从文件读密码,而不是写死在 compose 里。不开端口也可以用docker exec直接向服务器控制台发指令。

公司网段访问 Mojang 资源受限的话,再加两个变量:

environment: PROXY: "proxy.example.com:8080" PROXY_NON_PROXY_HOSTS: "localhost|127.0.0.1"

💡 为什么这么设:PROXY 会同时写入 http(s)_proxy 和 Java 的代理参数,启动时的版本与模组包下载都走代理;非代理列表防止容器内健康检查被误送进代理导致超时。


按需进阶——自定义 JVM 参数与生成器选项

这一节非必需,只有预设参数满足不了你时才需要动。

environment: JVM_OPTS: "-Dterminal.ansi=true" JVM_XX_OPTS: "-XX:MaxGCPauseMillis=200" LEVEL_TYPE: "amplified" GENERATOR_SETTINGS: '{"coordinateScale":684.412,"heightScale":684.412}'

💡 为什么这么设:JVM_OPTS / JVM_XX_OPTS 让你在镜像预设标志之上追加 -D 与 -XX 参数;LEVEL_TYPE 和 GENERATOR_SETTINGS 写入 server.properties 的同名配置项,控制世界结构与生成器数值。

⚠️ 易错点:冲突时镜像内置标志生效(最终命令里后写的赢),所以别在这两个变量里再写 -Xms/-Xmx,那属于 MEMORY 一族的职责;GENERATOR_SETTINGS 必须是合法 JSON,且只对新建世界生效。


跑起来之后按这个顺序推进:先只保留 EULA、TYPE、MEMORY 三项验证能进游戏,再逐项加白名单、RCON 和 autopause,每加一组重启一次确认行为。验证只要两条命令:

docker compose logs -f mc docker stats --no-stream

📌 配置没有标准答案,按你的硬件和玩家规模调。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询