gruntwork/terragruntTerragrunt 官方 Docker 镜像是由 Terragrunt 官方维护的容器化分发形式,封装了 Terragrunt 工具及其运行依赖,提供开箱即用的 Terragrunt 执行环境。Terragrunt 是 Terraform 的封装工具,旨在简化多环境、多模块 Terraform 配置的管理,通过自动化后端配置、版本控制、依赖管理等功能,提升基础设施即代码(IaC)的维护效率。
plan、apply、destroy);terragrunt.hcl 集中定义通用配置(如后端、提供商),避免重复代码;terragrunt plan/apply,实现基础设施自动化部署;从 Docker Hub 拉取官方镜像(默认使用最新版本,可指定标签如 v0.55.16 锁定版本):
bashdocker pull gruntwork/terragrunt:latest
运行以下命令检查 Terragrunt 版本,确认镜像正常工作:
bashdocker run --rm gruntwork/terragrunt:latest terragrunt --version
通过挂载本地 Terragrunt 配置目录,执行具体命令(如 plan、apply):
bash# 假设当前目录包含 terragrunt.hcl 及 Terraform 模块 docker run --rm -v $(pwd):/workspace -w /workspace gruntwork/terragrunt:latest terragrunt plan
将本地 Terragrunt 配置(terragrunt.hcl)、Terraform 模块、变量文件(如 terraform.tfvars)挂载到容器内 /workspace 目录(或自定义工作目录):
bashdocker run --rm \ -v $(pwd)/config:/workspace \ # 挂载配置目录 -v $(pwd)/secrets:/secrets \ # 挂载敏感文件(如 AWS 凭证) -w /workspace \ # 设置工作目录 gruntwork/terragrunt:latest \ terragrunt apply
通过 -e 参数传递环境变量(如云服务凭证、自定义配置):
bashdocker run --rm \ -v $(pwd):/workspace -w /workspace \ -e AWS_ACCESS_KEY_ID="AKIAEXAMPLE" \ -e AWS_SECRET_ACCESS_KEY="secret" \ -e TERRAGRUNT_TFPATH="/usr/local/bin/terraform" \ # 指定 Terraform 路径 gruntwork/terragrunt:latest \ terragrunt plan
通过 TERRAGRUNT_TFPATH 环境变量指定 Terraform 版本,镜像会自动下载对应版本(需确保网络通畅):
bashdocker run --rm \ -v $(pwd):/workspace -w /workspace \ -e TERRAGRUNT_DOWNLOAD="true" \ # 允许自动下载 Terraform -e TERRAGRUNT_TFPATH="/usr/local/bin/terraform-1.6.0" \ # 指定版本 gruntwork/terragrunt:latest \ terragrunt init
将 Terragrunt 缓存目录(含下载的 Terraform 二进制、模块缓存)挂载到本地,避免重复下载:
bashdocker run --rm \ -v $(pwd):/workspace \ -v ~/.terragrunt-cache:/root/.terragrunt-cache \ # 持久化缓存 gruntwork/terragrunt:latest \ terragrunt apply
| 变量名 | 说明 | 默认值 |
|---|---|---|
TERRAGRUNT_TFPATH | 指定 Terraform 可执行文件路径(用于自定义版本或路径) | /usr/local/bin/terraform |
TERRAGRUNT_DOWNLOAD | 是否自动下载 Terraform(true/false) | true |
TERRAGRUNT_CACHE_DIR | Terragrunt 缓存目录(存放下载的 Terraform、模块缓存等) | /root/.terragrunt-cache |
TERRAGRUNT_DEBUG | 启用调试模式(输出详细日志) | false |
TERRAFORM_VERSION | 构建镜像时指定默认 Terraform 版本(仅用于镜像构建,运行时可覆盖) | 最新稳定版 |
如需构建包含特定 Terraform 版本的镜像,可通过 --build-arg 指定:
bashdocker build \ --build-arg TERRAFORM_VERSION=1.6.0 \ -t my-custom-terragrunt:1.6.0 \ [***]
创建 docker-compose.yml,定义 Terragrunt 服务,适用于本地开发或固定环境:
yamlversion: '3.8' services: terragrunt: image: gruntwork/terragrunt:latest volumes: - ./config:/workspace:ro # 挂载只读配置目录 - ./secrets:/secrets:ro # 挂载敏感文件(如云凭证) - terragrunt-cache:/root/.terragrunt-cache # 持久化缓存 environment: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - TERRAGRUNT_TFPATH=/usr/local/bin/terraform-1.6.0 working_dir: /workspace command: ["terragrunt", "plan"] # 默认执行的命令 volumes: terragrunt-cache: # 命名卷,持久化缓存数据
启动服务:
bashdocker-compose up
在 .gitlab-ci.yml 中集成 Terragrunt 镜像执行部署任务:
yamlstages: - deploy deploy-infra: stage: deploy image: gruntwork/terragrunt:latest before_script: - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY script: - cd /builds/your-project/infrastructure # 切换到配置目录 - terragrunt init - terragrunt plan - terragrunt apply --auto-approve only: - main # 仅主分支触发
root)可能对挂载文件有读写权限,生产环境建议通过 --user 参数指定非 root 用户,避免权限泄露。apply)时,需确保容器网络可访问云厂商 API(如 AWS、Azure 等),无需特殊代理时可使用默认网络模式。v0.55.16)而非 latest,避免工具版本变更导致兼容性问题。v<terragrunt-version>(如 v0.55.16),latest 指向最新稳定版;



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