docker-minecraft-server 里 CurseForge 模组包自动安装失败的排查与修复
【免费下载链接】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
用 docker-minecraft-server 起服时,最常见的翻车现场就是:CurseForge 模组包自动安装失败。容器日志停在下载阶段、模组装一半、或者服务一启动就退出。这篇文章带你先判断自己踩的是哪种坑,再用最短路径修好它,最后确认服务器能正常进服。
快速对号入座:你的症状属于哪一种
启动容器后执行docker compose logs -f mc,对照下面三条判断:
- 日志里 API 调用直接报错,或容器很快退出——十有八九是
CF_API_KEY没配到位。 - 日志反复出现
java.lang.UnsupportedClassVersionError或class file version字样——镜像的 Java 版本和模组包要求对不上。 - 模组下载完、服务却立刻崩溃退出,或日志反复提示缺少某个 jar——通常是客户端专用模组混进了服务端,或内存不足导致
OutOfMemoryError。
对不上也没关系,按下面的根因顺序逐个排查,基本都能覆盖。
为什么装不上:四个最常见根因
1. API 密钥里的$被 compose 吃掉了(最容易踩)
CurseForge 的 API key 往往长得像$11$22$33aaaa...,开头就带$。如果你把 key 直接写进 compose 文件,docker compose 会把$11当成变量插值处理,结果容器拿到的 key 是残缺的,CurseForge 接口直接拒绝。解决思路只有一个:把 key 挪进.env文件(细节见修复流程第 2 步)。
2. 镜像 tag 和模组包要求的 Java 版本不匹配
ATM8 这类大型包要求 Java 17,而:latest镜像跟着最新 Minecraft 走的是更高版本 Java。版本对不上时启动会直接报 class 文件错误。选哪个 tag 以模组包页面标注为准,对照仓库里的 docs/versions/java.md 即可。
3. 内存还是默认的 1G
镜像默认只给 1G 内存,ATM8 级别的大型模组包至少要 4G,否则下载完成后的启动阶段直接OutOfMemoryError。改一行MEMORY就好。
4. 客户端专用模组被装进了服务端
有些模组只在客户端有意义,却忘了正确声明,服务端加载它们会崩。项目镜像自带一份默认排除清单(见 files/cf-exclude-include.json),但新出的客户端模组可能还没收录,这时需要手动加排除项。
动手修复:四步走
第 1 步:改用最小可用的 compose 配置
参考官方示例 examples/auto-curseforge/atm8/docker-compose.yml,核心就几行:
services: mc: image: itzg/minecraft-server:java17 ports: - "25565:25565" environment: EULA: "true" MODPACK_PLATFORM: AUTO_CURSEFORGE CF_API_KEY: ${CF_API_KEY} CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8 MEMORY: 4G volumes: - mc-data:/data volumes: mc-data: {}改完先docker compose up -d,确认镜像 tag、MEMORY已就位。
第 2 步:把 API 密钥放进.env文件
在 compose 文件同目录新建.env,内容一行,用单引号包住 key(这样$无需转义):
CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'compose 里保持CF_API_KEY: ${CF_API_KEY}不变。docker compose 会自动读取同目录的.env。预期结果:重新up -d后,日志不再出现认证类报错。
第 3 步:处理需要手动下载的模组
如果日志里列出某些模组"Need Download"(CurseForge 不允许自动拉取),在宿主机建一个目录挂载到容器固定路径/downloads,把浏览器下载好的文件放进去:
volumes: - ./downloads:/downloads再执行docker compose up -d,容器会自动从这里取文件。挂载关系示意:
第 4 步:有客户端模组冲突就补排除项
确认崩在哪个 mod 后,加一行排除即可:
CF_EXCLUDE_MODS: "creative-core,default-options"怎么确认已经修好了
一条命令看状态:
docker compose ps mc && docker compose logs mc --tail 30看到什么算成功:服务状态是running(或 healthcheck 为healthy),日志末尾出现Done (x.xs) For help, type "help",且客户端能进服、模组列表完整。如果还卡在下载阶段,把DEBUG设为"true"再重启,日志会输出完整的初始化细节,方便继续定位。
进阶与避坑
- 版本回退崩溃:如果某个新版模组包一装就崩,可以用
CF_FILE_ID或CF_FILENAME_MATCHER钉住一个已知兼容的版本。注意别选标记为 "server" 的文件——它们缺少 manifest,会破坏自动启动。 - 改完排除列表没生效:加
CF_FORCE_SYNCHRONIZE: "true"强制重新评估一次模组清单。 - 下载慢或频繁超时:把
CF_PARALLEL_DOWNLOADS从默认 4 调到 2,降低并发反而更稳。 - 内存相关的 JVM 报错:设
DEBUG_MEMORY: "true"可以看更详细的分配信息,排障方法见 docs/misc/troubleshooting.md。
一句话收尾:密钥放对位置、Java tag 对版本、内存给够,CurseForge 模组包自动安装基本就不会再翻车。想深入细节,读 docs/types-and-platforms/mod-platforms/auto-curseforge.md 和 docs/mods-and-plugins/curseforge-files.md 这两篇就够了。
【免费下载链接】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),仅供参考