Docker Compose 3.8配置文件中字符串变量替换的非.env方案
替换Docker Compose配置中CONFIG_DIRECTORY的替代方法
除了用.env文件和环境变量替换的方式,还有这些实用方法可以直接替换配置里的占位符:
用sed命令直接修改配置文件
适合一次性快速替换,直接在终端执行命令修改原文件:# 用#作为分隔符避免路径斜杠转义的麻烦 sed -i 's#CONFIG_DIRECTORY#/home/garnettm/development/config#g' docker-compose.yml执行后,配置里所有的CONFIG_DIRECTORY都会被替换成指定路径。
模板文件+脚本生成最终配置
先把原配置存为模板文件(比如命名为docker-compose.tpl.yml,保留CONFIG_DIRECTORY占位符),然后写个简单的shell脚本自动生成可用的配置:- 创建脚本
generate-compose.sh:#!/bin/bash # 定义目标路径 CONFIG_PATH="/home/garnettm/development/config" # 替换模板里的占位符并生成最终配置 sed "s/CONFIG_DIRECTORY/$CONFIG_PATH/g" docker-compose.tpl.yml > docker-compose.yml - 给脚本加执行权限:
chmod +x generate-compose.sh - 运行脚本:
./generate-compose.sh,就能得到替换完成的docker-compose.yml。
- 创建脚本
用Docker Compose扩展文件覆盖配置
不需要修改原配置,创建一个扩展文件docker-compose.override.yml,直接写好替换后的路径:services: nginx: volumes: - "/home/garnettm/development/config/nginx/nginx.conf:/etc/nginx/nginx.conf" - "/home/garnettm/development/config/certs:/etc/ssl/certs" web: volumes: - "/home/garnettm/development/config/certs:/var/client/config/ssl/certs" - "/home/garnettm/development/config/process:/var/client/process"Docker Compose运行时会自动合并原配置和扩展文件的内容,直接执行
docker-compose up即可生效。用Makefile自动化替换流程
写个Makefile来封装替换逻辑,方便重复执行:CONFIG_PATH := /home/garnettm/development/config COMPOSE_FILE := docker-compose.yml COMPOSE_TPL := docker-compose.tpl.yml generate-compose: sed "s/CONFIG_DIRECTORY/$(CONFIG_PATH)/g" $(COMPOSE_TPL) > $(COMPOSE_FILE)执行
make generate-compose就能自动从模板生成替换好的配置文件。
内容的提问来源于stack exchange,提问作者MattGarnett
相关产品推荐
相关产品推荐

