boxboat/config-mergeConfig Merge 是一个运行在Docker容器中的工具,用于合并JSON、TOML、YAML格式的配置文件,并支持环境变量替换。通过该工具可以轻松处理多环境配置文件的合并与定制,适用于需要动态生成配置的场景。
bashdocker pull boxboat/config-merge
bashdocker run --rm boxboat/config-merge -h
-f, --format:输出格式,可选json|toml|yaml,默认yaml-n, --inline:开始使用内联表示法的深度,默认10,设为0禁用-h, --help:显示帮助信息.env和.sh文件:会被加载为环境变量,用于变量替换.json, .js, .toml, .yaml, .yml文件:会被合并处理.patch.json, .patch.js, .patch.toml, .patch.yaml, .patch.yml文件:会作为JSONPatch应用容器的工作目录为/home/node,需要合并的文件/目录需挂载到此目录。
以下示例展示如何合并本地配置文件,生成适用于本地测试的Docker Compose配置:
bashdocker_compose_config=$( docker run --rm \ -v "$(pwd)/test/docker-compose/:/home/node/" \ boxboat/config-merge \ local.env docker-compose.yml docker-compose-local.patch.yml docker-compose-local.yml ) # 使用生成的配置启动Docker Compose docker-compose -f - -p nginx-local up <<EOF $docker_compose_config EOF # 部署到Swarm docker stack deploy -c - nginx-local <<EOF $docker_compose_config EOF
支持通配符匹配文件,但需在docker run命令中对通配符进行转义,以便在容器内展开:
bashdocker_compose_config=$( docker run --rm \ -v "$(pwd)/test/docker-compose/:/home/node/" \ boxboat/config-merge \ "*.env" docker-compose.yml "*-local*" )
扩展名为.json、.js、.toml、.yaml、.yml的文件将按顺序合并,合并算法基于lodash merge函数,规则如下:
扩展名为.patch.json、.patch.js、.patch.toml、.patch.yaml、.patch.yml的文件将作为JSON Patch应用于合并后的配置。
.env和.sh文件会被加载到环境中,环境变量替换使用a8m/envsubst实现,支持以下表达式:
| 表达式 | 含义 |
|---|---|
${var} | var的值(与$var相同) |
${var-$DEFAULT} | 若var未设置,则使用$DEFAULT |
${var:-$DEFAULT} | 若var未设置或为空,则使用$DEFAULT |
${var=$DEFAULT} | 若var未设置,则使用$DEFAULT |
${var:=$DEFAULT} | 若var未设置或为空,则使用$DEFAULT |
${var+$OTHER} | 若var已设置,则使用$OTHER,否则为空字符串 |
${var:+$OTHER} | 若var已设置,则使用$OTHER,否则为空字符串 |



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务