Docker 对接地形和tfstate
我有这个docker容器来运行terraform 别名terraform='docker run-i-t-v~/.aws:/root/.aws:ro-v$(pwd):/app-w/app/rubendb/terraform:0.11.8' 只是官方地形图的复制品。没什么特别的Docker 对接地形和tfstate,docker,terraform,Docker,Terraform,我有这个docker容器来运行terraform 别名terraform='docker run-i-t-v~/.aws:/root/.aws:ro-v$(pwd):/app-w/app/rubendb/terraform:0.11.8' 只是官方地形图的复制品。没什么特别的 FROM golang:alpine MAINTAINER "HashiCorp Terraform Team <terraform@hashicorp.com>" ENV TERRAFORM_VERSION
FROM golang:alpine
MAINTAINER "HashiCorp Terraform Team <terraform@hashicorp.com>"
ENV TERRAFORM_VERSION=0.11.8
RUN apk add --update git bash openssh
ENV TF_DEV=true
ENV TF_RELEASE=true
WORKDIR $GOPATH/src/github.com/hashicorp/terraform
RUN git clone https://github.com/hashicorp/terraform.git ./ && \
git checkout v${TERRAFORM_VERSION} && \
/bin/bash scripts/build.sh
RUN rm -rf /var/lib/apt/lists/*
WORKDIR $GOPATH
ENTRYPOINT ["terraform"]
然后我有了下一个文件夹结构,它工作正常,因为ups,我决定在dev文件夹中运行一些terraform的东西
ls -ls tf
total 0
0 drwxr-xr-x 3 ruben.ortiz staff 96 15 sep 23:43 dev
0 drwxr-xr-x 6 ruben.ortiz staff 192 11 sep 19:53 modules
0 drwxr-xr-x 4 ruben.ortiz staff 128 15 sep 12:39 prod
我像往常一样运行容器
terraform plan tf/prod/
工作正常,但容器创建了带有tfstate的.terraform文件夹和其他内容
所以,如果我想运行相同的命令,但dev环境无法运行,因为它检测到和先前的.terraform文件夹
ls -lisah tf/.terraform/
total 8
901814 0 drwxr-xr-x 5 ruben.ortiz staff 160B 15 sep 12:38 .
885805 0 drwxr-xr-x 6 ruben.ortiz staff 192B 15 sep 23:54 ..
901815 0 drwxr-xr-x 15 ruben.ortiz staff 480B 16 sep 00:05 modules
901821 0 drwxr-xr-x 3 ruben.ortiz staff 96B 10 sep 23:02 plugins
901819 8 -rw-r--r-- 1 ruben.ortiz staff 567B 16 sep 18:43 terraform.tfstate
如果我进入dev文件夹,因为我刚刚在当前目录下设置了一个卷,它就看不到sharedmodules文件夹
你们如何让大家解决这个问题
谢谢 我必须同意这里的评论。我鼓励你重新评估你从这个过程中获得的好处 也就是说,它导致冲突的原因是您试图从一个公共目录调用两个不同的工作区。您可以通过在输入容器时重写工作目录(请参阅)或简单地将目录更改为正确的上下文来避免这种情况 我还建议您尝试使用不同的工作区来管理环境
我必须同意这里的评论。我鼓励你重新评估你从这个过程中获得的好处 也就是说,它导致冲突的原因是您试图从一个公共目录调用两个不同的工作区。您可以通过在输入容器时重写工作目录(请参阅)或简单地将目录更改为正确的上下文来避免这种情况 我还建议您尝试使用不同的工作区来管理环境
Terraform已经作为静态链接的二进制文件分发,因此在容器中运行它并没有任何优势。他们正在使用的Dockerfile也确实需要成为一个多阶段构建。如果您将它用于Jenkins代理,那么它可能会有所帮助。我真的很期待避免手动安装terraform或使用brew。关于“brew安装terraform”没有什么太痛苦的,linux是一个带有可执行二进制文件的简单安装过程。如果您希望通过Terraform部署过程实现更多自动化,请查看Atlantis:(最近由Hashicorp收购)。@Rubendob不要使用基本golang映像,因为它包含许多构建依赖项。实际上,您下载的不止一个Terraform二进制文件。您可以使用不同的值来解决问题,因为每个工作空间的
TF\u DATA\u DIR
已作为静态链接的二进制文件分发,所以在容器中运行它并不会带来任何好处。他们正在使用的Dockerfile也确实需要成为一个多阶段构建。如果您将它用于Jenkins代理,那么它可能会有所帮助。我真的很期待避免手动安装terraform或使用brew。关于“brew安装terraform”没有什么太痛苦的,linux是一个带有可执行二进制文件的简单安装过程。如果您希望通过Terraform部署过程实现更多自动化,请查看Atlantis:(最近由Hashicorp收购)。@Rubendob不要使用基本golang映像,因为它包含许多构建依赖项。实际上,您下载的不止一个Terraform二进制文件。您可以使用每个工作区的TF\u DATA\u DIR
的不同值来解决问题
ls -lisah tf/.terraform/
total 8
901814 0 drwxr-xr-x 5 ruben.ortiz staff 160B 15 sep 12:38 .
885805 0 drwxr-xr-x 6 ruben.ortiz staff 192B 15 sep 23:54 ..
901815 0 drwxr-xr-x 15 ruben.ortiz staff 480B 16 sep 00:05 modules
901821 0 drwxr-xr-x 3 ruben.ortiz staff 96B 10 sep 23:02 plugins
901819 8 -rw-r--r-- 1 ruben.ortiz staff 567B 16 sep 18:43 terraform.tfstate