
docker-minecraft-server 环境变量五个场景完整搞定配置文件动态改造【免费下载链接】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-serverdocker-minecraft-server 的环境变量能帮你做一件很多人不知道的事动态改造配置文件。在配置里写下${CFG_DB_HOST}这样的占位符容器一启动启动脚本就会把它换成你声明的值镜像和文件都不用动。下面按部署服务器时会真实遇到的五个场景走一遍看完你就能写出「不改镜像也能换配置」的 compose 文件。把配置从镜像里抽出来文件写占位符启动时填值数据库地址、服务器名这类信息往往是部署当天才定下来的提前写死进配置文件既不方便也不安全。这套镜像的玩法是反过来配置文件里放${CFG_DB_HOST}形式的占位符compose 里声明对应环境变量启动时脚本会扫一遍容器内/data路径下的文件把占位符逐一替换掉。# 配置文件 database.yml 里写的是host: ${CFG_DB_HOST} services: minecraft: environment: REPLACE_ENV_VARIABLES: true CFG_DB_HOST: db.example.com CFG_DB_NAME: minecraft只有带CFG_前缀的变量默认参与替换前缀由REPLACE_ENV_VARIABLE_PREFIX控制旧写法ENV_VARIABLE_PREFIX也能识别把前缀设成空字符串则任意变量名都能匹配。同步插件时顺手把变量也替了替换默认只发生在容器启动、针对/data里已有的文件。可很多插件、mod 的配置文件是镜像启动时从网上下载再同步进/mods、/config的这些文件里的占位符默认不会被动到。想连它们一起处理把开关打开environment: REPLACE_ENV_DURING_SYNC: true之后同步进来的、扩展名在允许范围内的文件落盘时就会完成变量替换插件拿到的直接是可用的配置。密码不进 Git用 _FILE 后缀从文件读密钥 RCON 密码写进 compose 问题不大文件反正只在本地但数据库口令、API key 这种东西直接当环境变量声明然后提交等于公开张贴。绕法是给变量名加_FILE后缀指向一个挂载进容器的文件脚本会读取文件内容当值用secrets: db_password: file: ./db_password services: minecraft: environment: CFG_DB_PASSWORD_FILE: /run/secrets/db_password配置文件里的占位符照常写${CFG_DB_PASSWORD}不用带后缀。密码文件放在仓库目录之外并加入 .gitignore仓库里就只剩一个路径。只让该改的文件被改扩展名白名单加排除规则替换默认覆盖 yml、yaml、txt、cfg、conf、properties、hjson、json、tml、toml 这些扩展名用REPLACE_ENV_SUFFIXES可以增减范围。另外两个排除手段按粒度区分REPLACE_ENV_VARIABLES_EXCLUDES按文件名排除不带路径REPLACE_ENV_VARIABLES_EXCLUDE_PATHS按路径整目录排除且是递归的。比如 Essentials 的userdata.yml存玩家数据误替换会出问题把这类文件排除掉最稳妥REPLACE_ENV_VARIABLES_EXCLUDES: userdata.yml REPLACE_ENV_VARIABLES_EXCLUDE_PATHS: /data/plugins/Essentials/userdataYAML 里塞不下的用 JSON 补丁打进去占位符替换是「原位换值」位置得先存在。要是目标键在配置里还没有、或者藏在三层嵌套里就想办法用PATCH_DEFINITIONS指向一个补丁集 JSON 文件或放多个补丁文件的目录按 JSON path 对已有文件做修改新增键、改已有键都行file和value字段本身也支持${...}占位符{ patches: [ { file: /data/paper.yml, ops: [ { $set: { path: $.verbose, value: true } }, { $set: { path: $.settings[velocity-support].enabled, value: ${CFG_VELOCITY_ENABLED}, value-type: bool } ] } ] }补丁文件随配置卷挂载进容器compose 里写PATCH_DEFINITIONS: /config/patch-set.json每次启动都会应用一遍。高频环境变量速查变量默认值作用TYPEVANILLA服务器类型Paper、Forge 等都靠它切换EULA—必须为 true否则容器启动即拒绝运行VERSIONLATEST指定 Minecraft 版本可锁死小版本MOTD—服务器列表里显示的名称DIFFICULTYeasy难度peaceful / easy / normal / hardENABLE_RCONtrue开启 RCON 远程控制台RCON_PASSWORD需要改⚠️ RCON 连接密码别用默认值RCON_PORT25575RCON 端口compose 里这些变量全部要加引号不然true、25575会被 YAML 吃掉类型。五个场景练熟之后examples 目录下还有现成的 compose 可以照着改从 Paper 到各类 mod 包都有对应样例。【免费下载链接】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),仅供参考