You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker使Terragrunt二进制文件实现非交互式正确执行?

问题描述

我可以通过以下命令在Docker容器内交互式执行Terragrunt二进制文件,操作完全正常:

$ docker run -ti --rm -v $HOME/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/apps -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN alpine/terragrunt:0.13.6 bash

进入容器后,切换到Terragrunt配置文件所在目录执行命令:

bash-5.0# cd environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core/
bash-5.0# terragrunt init -reconfigure;terragrunt plan

但当我尝试通过脚本(如Jenkins任务)非交互式执行时,使用了以下命令:

$ docker run -ti --rm -v $HOME/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/apps -w /apps/environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN alpine/terragrunt:0.13.6 terragrunt init -reconfigure; terragrunt plan

却出现错误,提示找不到terragrunt.hcl文件:

[terragrunt] 2022/08/27 11:12:14 Error reading file at path /Users/chewmanfoo/bitbucket.org/aws-terraform-infrastructure/terragrunt.hcl: open /Users/chewmanfoo/bitbucket.org/aws-terraform-infrastructure/terragrunt.hcl: no such file or directory 

我原本以为-w参数会设置容器内的工作目录,让Terragrunt在正确位置执行,但实际结果不符,求解决方法。

解决方法

问题出在命令里的分号;上——这个分号会被宿主机的shell解析,导致terragrunt plan是在宿主机上执行,而不是在容器内部。这就解释了为什么会出现宿主机路径的错误,因为第二个命令根本没进入容器。

修正方法有两种:

  • 把整个Terragrunt命令用引号包裹,让容器内的shell来执行:
    $ docker run --rm -v $HOME/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/apps -w /apps/environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN alpine/terragrunt:0.13.6 sh -c "terragrunt init -reconfigure && terragrunt plan"
    
    注意:非交互式场景无需-ti参数;用&&代替;,确保前一个命令执行成功后再运行下一个;通过sh -c来执行引号内的命令串。
  • 拆成两个独立的docker run调用(不推荐,效率较低):
    $ docker run --rm -v $HOME/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/apps -w /apps/environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN alpine/terragrunt:0.13.6 terragrunt init -reconfigure
    $ docker run --rm -v $HOME/.aws:/root/.aws -v ${HOME}/.ssh:/root/.ssh -v `pwd`:/apps -w /apps/environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN alpine/terragrunt:0.13.6 terragrunt plan
    

另外,请确认宿主机当前目录(pwd)下是否存在environments/assembly/us-east-1/sqs/ss-error-generic-encrypted/core/terragrunt.hcl文件,确保挂载路径正确。

内容的提问来源于stack exchange,提问作者Jason Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 06:36:27