如何在WSL控制台通过别名调用容器运行Terraform
解决方案
你的实现方案完全可行,按以下步骤修复即可:
1. 修复配置文件识别失败问题
最初tf init提示空目录的根源是原脚本中错误使用了小写的$pwd,Shell 内置的当前工作目录环境变量为大写$PWD,未定义的$pwd为空值,导致挂载了无效路径,容器内工作目录为空。
修正后的/setup/terraform/tf.sh内容如下:
#!/bin/bash # 此处镜像名替换为你自己构建的自定义Terraform镜像名 TF_IMAGE="custom-tf-azure:latest" docker run --rm -it --name terraform \ -v "$(PWD):/workspace" \ # 挂载本地Azure CLI凭证目录,复用本地登录状态 -v "${HOME}/.azure:/root/.azure" \ -w /workspace \ $TF_IMAGE "$@"
修改完成后给脚本添加执行权限:
chmod +x /setup/terraform/tf.sh
2. 自定义镜像构建
你当前编写的Dockerfile逻辑完全可用,无需调整,构建命令参考:
cd /setup/terraform docker build -t custom-tf-azure:latest .
如果后续需要新增其他依赖,直接在Dockerfile中补充安装步骤即可。
3. 解决Azure登录会话问题
不需要在容器内执行az login,你只需在WSL本地环境执行一次az login完成身份认证,上述脚本已经将本地~/.azure凭证目录挂载到容器内,容器中的Azure CLI会自动读取已有登录会话,无需重复认证。
4. 功能验证
回到projectA目录执行以下命令验证:
- 执行
tf plan可正常读取main.tf等配置文件,无空目录报错 - 执行
tf init -backend-config="env/backend.tfvars"可正常连接Azure后端存储,无权限或az命令缺失报错
内容的提问来源于stack exchange,提问作者lordisp
相关产品推荐
相关产品推荐

