如何将Terraform变量传递至docker-compose.yaml文件?
解决Terraform中docker-compose.yaml变量未替换的问题
问题核心在于file()函数仅读取文件原始内容,不会解析替换其中的变量占位符。要实现变量注入,需要使用Terraform的templatefile()函数来渲染模板文件。
步骤1:调整模板文件(可选重命名)
保持你的docker-compose配置内容不变,可将文件重命名为docker-compose.tpl(也可保留原文件名),模板中的变量占位符使用${变量名}格式:
version: '3.2' services: cadvisor: image: gcr.io/google-containers/cadvisor:${image_version} container_name: cadvisor volumes: - /:/rootfs:ro - /var/lib/docker:/var/lib/docker:ro mem_limit: ${limit} mem_reservation: ${reservation} ports: - 8080:8080
步骤2:修改Terraform资源配置
将local_file资源中的file()替换为templatefile(),并通过第二个参数传入需要替换的变量映射:
resource "local_file" "compose" { content = templatefile("${var.compose_path}/docker-compose.tpl", { image_version = var.image_version limit = var.limit reservation = var.reservation }) filename = "${path.module}/foo.bar" }
关键说明
templatefile()会解析模板中的${变量名}占位符,并用传入的映射值替换- 如果模板中存在不需要替换的
${}语法,需用$${}进行转义 - 若保留原文件名
docker-compose.yml,只需将模板路径改为对应文件名即可
内容的提问来源于stack exchange,提问作者Evgol
相关产品推荐
相关产品推荐

