
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-serveritzg/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变量默认值说明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.propertiesenvironment: MODE: survival DIFFICULTY: hard MAX_PLAYERS: 20 SEED: 88237465 MOTD: Paper 1.20 - 生存服 为什么这么设SEED 固定后世界布局可复现朋友想重开世界或建小号服都能对齐MOTD 不设置时镜像会按 TYPE 生成一条默认横幅设了就用你的。⚠️ 易错点镜像默认 OVERRIDE_SERVER_PROPERTIEStrue每次启动都会用环境变量覆盖 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_RCONtrue 并自动生成随机密码自己指定 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.ansitrue JVM_XX_OPTS: -XX:MaxGCPauseMillis200 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),仅供参考