拓冰建站拓冰建站
首页 / 资讯中心 / 正文

docker-minecraft-server 使用 packwiz 模组包部署指南:PACKWIZ_URL 配置、启动处理顺序与源码实现

docker-minecraft-server 使用 packwiz 模组包部署指南PACKWIZ_URL 配置、启动处理顺序与源码实现【免费下载链接】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-serveritzg/minecraft-server镜像的 Packwiz 模组包支持展开说明如何通过PACKWIZ_URL让容器在启动时自动拉取并安装 packwiz 格式的 Mod 包并结合仓库源码启动模组安装脚本解析其处理顺序、安装器下载机制与.env重载细节帮助你完成从docker run到 Compose 的落地配置并理解服务端侧下载、与其他 Mod 来源变量叠加等关键行为。packwiz 是什么packwiz 是一个用于维护和分发 Mod 包定义的 CLI 工具同时支持CurseForge和Modrinth作为模组来源。它不要求你像传统 zip 模组包那样预先打包好所有 jar而是以一组轻量级的 TOML 定义文件pack.toml、index.toml以及每个模组一份.pw.toml描述包内容由安装器在启动时按需解析并下载。镜像本身不内置 packwiz而是在检测到PACKWIZ_URL时动态引导安装器完成安装这一机制由 scripts/start-setupModpack 中的handlePackwiz函数实现。核心配置PACKWIZ_URL要用 packwiz 模组包配置服务端 Mod只需把PACKWIZ_URL环境变量指向你的pack.toml模组定义文件地址docker run -d --pullalways \ -v /path/on/host:/data -e TYPEFABRIC \ -e PACKWIZ_URLhttps://example.com/modpack/pack.toml \ itzg/minecraft-server仓库中的 packwiz Compose 示例 展示了一个更完整的写法以 Quilt Fabric 生态示例包为例services: mc: image: itzg/minecraft-server tty: true stdin_open: true environment: EULA: true # Match loader from versions section of https://github.com/packwiz/packwiz-example-pack/blob/v1/pack.toml TYPE: QUILT VERSION: 1.19 QUILT_LOADER_VERSION: 0.17.0 PACKWIZ_URL: https://raw.githubusercontent.com/packwiz/packwiz-example-pack/refs/heads/v1/pack.toml volumes: - ./data:/data ports: - 25565:25565要点说明PACKWIZ_URL的值是pack.toml的 HTTP(S) 地址TYPE应与包中声明的加载器生态匹配如示例中 Quilt 对应 Fabric 系模组loader 版本变量如QUILT_LOADER_VERSION也需与包定义中的版本保持一致避免 class file version 之类的兼容问题/data卷持久化世界数据与安装后的模组。启动处理顺序packwiz 先于其他 Mod 定义原文档明确说明packwiz 模组包定义会在其他 Mod 定义MODPACK、MODS等之前被处理目的是允许你在此基础上追加处理或覆盖例如某些模组不在 Modrinth/CurseForge 上可用、或你不维护该包时。这一点可以从 scripts/start-setupModpack 的顶层调用顺序得到印证各处理函数按如下次序执行handlePackwiz第 350 行——packwiz 安装最先执行handleModpackZip——MODPACKzip 包解压handleListings——MODS/PLUGINS/MODS_FILE/PLUGINS_FILE清单handleGenericPacks——GENERIC_PACK(S)通配包handleModrinthProjects——MODRINTH_PROJECTShandleCurseForgeFiles——CURSEFORGE_FILES。也就是说后续所有来源下载的 jar 都会落入同一个mods/plugins目录若与 packwiz 已安装的模组同名同路径后写者生效因此 packwiz 适合作为“基线包”再用MODS等变量做增量或替换。源码实现安装器如何被下载与执行handlePackwiz函数scripts/start-setupModpack的实际流程分两步第一步下载 packwiz 安装器。通过mc-image-helper maven-download从 packwiz 官方 Maven 仓库拉取安装器构件mc-image-helper maven-download \ --maven-repohttps://maven.packwiz.infra.link/repository/release/ \ --grouplink.infra.packwiz --artifactpackwiz-installer --classifierdist \ --skip-existing--skip-existing表示如果本地已有缓存的安装器则跳过下载重复启动时不重复拉取。第二步执行安装。直接用 Java 运行安装器主类注意-s server参数java -cp ${packwizInstaller} link.infra.packwiz.installer.Main -s server ${PACKWIZ_URL}-s server即sideserver安装器只解析并下载服务端侧的模组这与文档中“packwiz 已预配置为只下载服务端模组”的说明一致。任何一步失败都会打印错误日志并exit 1容器启动直接失败便于你在健康检查或编排系统中及时发现包定义问题。.env 交互LOAD_ENV_FROM_FILE 的重载时机如果你的包附带一个.env文件并且你通过LOAD_ENV_FROM_FILE引用了它那么该文件会在 packwiz 安装器运行之后被立即重新加载使得包刚下载下来的环境变量值能作用于剩余启动阶段如server.properties生成、JVM 参数拼接等。源码依据在 scripts/start-setupModpack# packwiz may have just downloaded/updated the env file referenced by # LOAD_ENV_FROM_FILE. The initial load in start-configuration happened # before this point, so re-load it now to pick up the packs values for # the remaining setup stages (server.properties, JVM args, etc.). if [[ ${LOAD_ENV_FROM_FILE:-} ]]; then if ! loadEnvFromFile ${LOAD_ENV_FROM_FILE}; then exit 1 fi fi需要注意一个限制TYPE和VERSION在更早阶段deploy 分发之前就已解析完毕因此包内提供的.env无法改变这两项。若希望包的.env能决定TYPE/VERSION请改用LOAD_ENV_FROM_GENERIC_PACK或LOAD_ENV_FROM_ARCHIVE它们的加载时机在TYPE分发之前参见 Mod/插件文档中的 env 加载说明。pack.toml 包结构速览结合仓库中 packwiz 测试夹具 中的真实示例一个最小可用的 packwiz 包由三部分构成包入口pack.tomltests/setuponlytests/packwiz/web/pack.tomlname Vanillia Server author itzg version 2.0.0 pack-format packwiz:1.1.0 [index] file index.toml hash-format sha256 hash 1a27b406c3fb6d35167fe659384ab528a6b3f8a66e6c05d593058e646aec591f [versions] fabric 0.14.8 minecraft 1.19其中[index]指向文件索引index.toml含 sha256 校验和[versions]声明加载器与游戏版本——容器侧的TYPE/VERSION/loader 版本变量应与之对应。文件索引index.tomltests/setuponlytests/packwiz/web/index.toml列出包内每个文件的校验和metafile true标记出模组元数据文件。模组定义mods/*.pw.tomltests/setuponlytests/packwiz/web/mods/architectury-api.pw.tomlname Architectury API filename architectury-5.7.28-fabric.jar side both [download] url https://cdn.modrinth.com/data/lhGA9TYQ/versions/5.7.28fabric/architectury-5.7.28-fabric.jar hash-format sha1 hash aa38ae9cc2e978e4ec87ff891f7b02ea0c0ee1b8 [update] [update.modrinth] mod-id lhGA9TYQ version Hf0Bau1jside字段决定该模组在哪个侧client/server/both安装[download]支持直接 URL 加校验和[update.modrinth]则提供后续从 Modrinth 更新的元数据。CurseForge 来源的包同理使用对应的 update 段。常见问题排查客户端模组被拉下来导致服务端报错packwiz 虽预配置为只下载服务端模组但如果你的pack.toml中把纯客户端模组的side配成了both它仍会被下载。请检查包配置将客户端专属模组改为client。安装失败日志Failed to get packwiz installer通常意味着无法访问maven.packwiz.infra.link网络受限环境Failed to run packwiz installer则是安装器执行失败常见原因是包 URL 不可达、pack.toml/index.toml校验和不匹配。可配合DEBUGtrue观察完整启动流程。模组与包外清单冲突由于 packwiz 最先执行MODS/MODPACK等后续来源的同名文件会覆盖包内文件需要删旧件时可结合REMOVE_OLD_MODSTRUE使用见 Mod/插件总览。自动化测试如何验证该功能仓库内置了一个 setup-only 集成测试 tests/setuponlytests/packwiz用 nginx 容器托管一个本地pack.tomlMC 容器以TYPECUSTOMCUSTOM_SERVER/servers/fake.jar启动避免真实开服仅依赖http://web/pack.toml触发 packwiz 流程。验证脚本 verify.sh 断言安装结果mc-image-helper assert fileExists mods/architectury-5.7.28-fabric.jar即安装成功后/data/mods下应出现包定义的 jar 文件。该测试的 require.sh 注释说明了跳过条件maven.packwiz.infra.link不可解析时测试被跳过印证了安装器确实依赖 packwiz 官方 Maven 仓库这一外部依赖。小结在 docker-minecraft-server 中使用 packwiz 的关键只有三步设置PACKWIZ_URL指向pack.toml、保证TYPE/loader 版本与包定义匹配、持久化/data。从 scripts/start-setupModpack 的实现可见安装器经 Maven 仓库下载带本地缓存后以-s server模式执行只装服务端模组且在所有其他 Mod 来源之前运行从而可以无缝叠加MODS、GENERIC_PACKS、MODRINTH_PROJECTS等其他机制做增量定制若需包内.env影响全局配置注意LOAD_ENV_FROM_FILE的二次重载时机与TYPE/VERSION的解析限制。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门