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 或内存参数上。

让服务器先跑起来:最小启动集——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"| 变量 | 默认值 | 说明 |
|---|---|---|
| MEMORY | 1G | 通用内存上限,INIT/MAX 未设置时用它 |
| INIT_MEMORY | 同 MEMORY | 对应 -Xms 初始堆大小 |
| MAX_MEMORY | 同 MEMORY | 对应 -Xmx 最大堆大小 |
| USE_AIKAR_FLAGS | false | 一键套用 Aikar 的 GC 参数组合 |
| USE_MEOWICE_FLAGS | false | 面向 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),仅供参考