容器中的Terraform azure cli身份验证

容器中的Terraform azure cli身份验证,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我想创建一个容器,从中运行terraform命令。我的dockerfile如下所示: FROM mcr.microsoft.com/azure-cli RUN apk add curl ENV TERRAFORM_VERSION 0.12.21 RUN curl -sL https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip -o tf

我想创建一个容器,从中运行terraform命令。我的dockerfile如下所示:

FROM mcr.microsoft.com/azure-cli
RUN apk add curl
ENV TERRAFORM_VERSION 0.12.21
RUN curl -sL https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip -o tf.zip \
  && unzip tf.zip \
  && mv terraform /sbin/ \
  && rm -rf tf.zip
我的
main.tf
看起来像:

provider "azurerm" {
  version         = "~>1.44"
  subscription_id = "xxx"
}
provider "azuread" {
  version = "~>0.6.0"
}
terraform {
  backend "azurerm" {}
}
我通常在我的
Windows
主机上做的是
az登录
,然后

terraform init \
    -backend-config=storage_account_name=xxx \
    -backend-config=container_name=terraform-state \
    -backend-config=access_key="xxx" \
    -backend-config=key=app.tfstate
问题是,当我在docker容器内执行相同操作时,运行如下
docker run--rm-ti bash
而不是成功初始化,我会得到奇怪的错误,如:

Error: Failed to get existing workspaces: storage: service returned error: StatusCode=403, ErrorCode=AuthenticationFailed, ErrorMessage=Server failed to authenticate the request. Make sure the value of 
Authorization header is formed correctly including the signature.

这是否与

有关?不知什么原因,在我使用了
ubuntu:18.04
image而不是
mcr.microsoft.com/azure cli
并安装了
az
之后,一切都开始工作了

FROM ubuntu:18.04
RUN apt update && apt install -y curl jq wget unzip ca-certificates gnupg lsb-release apt-transport-https 

# Install Azure CLI
COPY azure-cupi.pub /root/.ssh/azure-cupi.pub
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
RUN curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null
RUN AZ_REPO=$(lsb_release -cs) && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | tee /etc/apt/sources.list.d/azure-cli.list
RUN apt update && apt install -y azure-cli

# Install Terraform
ARG TERRAFORM_VERSION="0.12.22"
RUN cd /tmp && \
    wget https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip && \
    unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip -d /usr/bin && \
    rm -rf /tmp/* && \
    rm -rf /var/cache/apk/* && \
    rm -rf /var/tmp/*

我没有发现明显的差异。

今天刚刚创建了dockerfile,它工作得很好,您可以试试吗?谢谢链接@4c74356b41。试过了,但没有区别。我也有同样的错误。你也在使用terraform azure cli身份验证吗?是的,我在特定的docker映像上使用azure cli身份验证。这是否适用于在dockeryes之外使用相同凭据的您,我使用azure cli auth在windows计算机上运行了几个月,但一旦我尝试从Docker容器内部运行它,就会出现该错误。到目前为止,我无法在容器外模拟这种行为。