尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

docker-minecraft-server:免改文件,用环境变量动态改写配置文件

docker-minecraft-server:免改文件,用环境变量动态改写配置文件 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 是一个开箱即用的 Minecraft Java 版 Docker 镜像启动时自动下载服务器、Mod 加载器和 Mod 包。它内置的环境变量配置文件动态替换机制让你在 compose.yaml 里写几个变量容器启动时就会自动改写 /data 下的配置文件——不用进镜像改文件也不用每次重新构建。假设你给服务器装了个要连外部数据库的插件上线前想把数据库地址从测试环境换成生产环境。传统做法是改配置文件、重新构建、重新部署或者进容器手改下次重建又得重来一遍。这些值只有部署时才确定本就不该烧进镜像里。而镜像的启动脚本恰好替你解决了这件事 30 秒看懂原理REPLACE_ENV_IN_PLACE 自动扫描替换只要REPLACE_ENV_IN_PLACE为true默认值启动脚本就会遍历容器 /data 路径下的所有文件把匹配容器环境变量的变量替换掉。变量按${变量名}声明和脚本语言一个语法。默认只有CFG_前缀的变量参与替换即${CFG_DB_HOST}会被替换而${DB_HOST}不会用REPLACE_ENV_VARIABLE_PREFIX可以改这个前缀设为空字符串则任意变量名都生效。最小示例——/data下某插件的database.ymldatabase: host: ${CFG_DB_HOST} name: ${CFG_DB_NAME} password: ${CFG_DB_PASSWORD}基础替换host、name、password 三件套你的情况配置文件里有几个空位值在部署时才定。compose.yaml 里这样写environment: EULA: TRUE REPLACE_ENV_IN_PLACE: true CFG_DB_HOST: db.example.com:3306 CFG_DB_NAME: minecraft CFG_DB_PASSWORD: your_password容器启动后发生了什么脚本扫描 /data把上面三个占位符就地换成真实值服务器拿着正确的数据库配置直接跑起来。默认替换覆盖.yml、.yaml、.txt、.cfg、.conf、.properties这些扩展名的文件插件配置文件基本都在射程内。密码这种敏感值写在这里就露怯了——compose.yaml 往往要提交进仓库明文密码等于把钥匙挂在门上。密钥文件注入密码不进明文你的情况密码必须保密但配置文件里照样要能引用它。compose.yaml 里这样写secrets: db_password: file: ./db_password environment: CFG_DB_PASSWORD_FILE: /run/secrets/db_password注意配置文件里还是写${CFG_DB_PASSWORD}占位符不变——你声明的是同名加_FILE后缀的变量指向挂载进容器的密钥文件。启动时脚本读文件内容完成替换compose.yaml 里自始至终没有出现过密码本身。替换虽然方便但默认是见${...}就换遇到某些插件的运行时数据文件就可能误伤玩家数据。排除特定插件目录给不该动的文件开天窗你的情况某些文件长得像配置、实际是运行时数据比如 Essentials 的userdata.yml里存着玩家昵称和 UUID万一里面碰巧有${...}样式的内容被替换数据就坏了。compose.yaml 里这样写environment: REPLACE_ENV_VARIABLES_EXCLUDES: userdata.yml REPLACE_ENV_VARIABLES_EXCLUDE_PATHS: /data/plugins/Essentials/userdata /data/plugins/MyPluginREPLACE_ENV_VARIABLES_EXCLUDES按文件名排除不带路径REPLACE_ENV_VARIABLES_EXCLUDE_PATHS按路径整目录递归排除。两个变量可以单独用也可以像上面这样组合。排除了不该碰的还有一类情况默认只扫 /data你从挂载目录同步进来的文件怎么办文件同步时也走替换默认替换只发生在启动时、只针对 /data 下的文件。如果你的插件或 Mod 是从挂载的/plugins、/mods、/config目录同步进 /data 的里面的占位符不会被处理。把REPLACE_ENV_DURING_SYNC设为true默认false同步文件时也会走同一套替换逻辑两个目录里的占位符都管得过来。整文件替换覆盖了大部分场景但偶尔你只想精准地改某一个字段甚至给配置文件加一个原本不存在的字段。进阶JSON Patch 精准改单个字段 ⚙️把PATCH_DEFINITIONS指向一个补丁定义 JSON 文件用 JSON Patch 语法指定目标文件和操作列表value字段同样支持${...}占位符{ file: /data/paper.yml, ops: [ { $set: { path: $.verbose, value: true } }, { $set: { path: $.settings[velocity-support].enabled, value: ${CFG_VELOCITY_ENABLED}, value-type: bool } } ] }启动时这两个字段会被精确写入paper.yml文件其余部分原封不动——比整文件替换更适合在别人的配置文件上打补丁这类需求。高频环境变量速查变量作用默认值TYPE服务器类型VANILLAEULA必须设为true无必填VERSIONMinecraft 版本LATESTMOTD登录消息空DIFFICULTY难度peaceful/easy/normal/hardeasyENABLE_RCON启用 RCONtrueRCON_PASSWORDRCON 密码必须修改随机生成RCON_PORTRCON 端口25575少改文件、多改变量把敏感配置安全地塞进容器——这就是环境变量替换给 Minecraft 服务器部署带来的核心收益。更多场景可以直接翻 examples/docker-compose.yml 里的示例全部变量的说明见 docs/variables.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),仅供参考
返回列表