【问题标题】:Passing Variables to Docker Compose via a Terraform script for an Azure App Service通过 Azure 应用服务的 Terraform 脚本将变量传递给 Docker Compose
【发布时间】:2021-07-29 08:33:56
【问题描述】:

我该怎么做

VAR=VAULE docker-compose up

来自使用 Docker Compose 文件构建 Azure 应用服务的 Terraform 脚本

 site_config {
    app_command_line = ""
    linux_fx_version = "COMPOSE|${filebase64("../docker-compose.yaml")}"
  }

我正在通过 terraform 成功构建 Azure 应用服务,该服务托管一个推送到 ACR 的 docker 容器。但是,我想将变量传递给我的 docker-compose.yaml 文件,但似乎无法找到它们的方法。

docker compose 触发自


  depends_on = [ null_resource.docker_push ]

  name                = "myapps-apps-appservice"
  location            = "${azurerm_resource_group.mine.location}"
  resource_group_name = "${azurerm_resource_group.mine.name}"
  app_service_plan_id = "${azurerm_app_service_plan.asp.id}"

  site_config {
    app_command_line = ""
    linux_fx_version = "COMPOSE|${filebase64("../docker-compose.yaml")}"
  }

  app_settings = {
    "WEBSITES_ENABLE_APP_SERVICE_STORAGE" = "false",
    "DOCKER_REGISTRY_SERVER_USERNAME" = azurerm_container_registry.container_registry.admin_username,
    "DOCKER_REGISTRY_SERVER_URL" = azurerm_container_registry.container_registry.login_server,
    "DOCKER_REGISTRY_SERVER_PASSWORD" = azurerm_container_registry.container_registry.admin_password
  }
}

我所有的 terraform 都是从 Azure Pipeline 中的部署脚本调用的(这些变量就是在其中设置的)

terraform apply -auto-approve \
    -var "app_version=$VERSION" \
    -var "client_id=$ARM_CLIENT_ID" \
    -var "client_secret=$ARM_CLIENT_SECRET" \
    -var "tenant_id=$ARM_TENANT_ID" \
    -var "subscription_id=$ARM_SUBSCRIPTION_ID"

但是,当 docker-compose.yaml 文件被触发时,这些变量都无法访问。我什至尝试在部署脚本中执行以下操作:

export VERSION=1

docker-compose.yaml 片段

    image: "myacr.azurecr.io/my-container:${VERSION}"
    build: 
      context: ./my-container
      dockerfile: Dockerfile-prod
    container_name: my-container

有什么想法吗?

【问题讨论】:

  • 我也测试了将变量添加到 app_settings 块。那没用

标签: docker docker-compose azure-web-app-service terraform


【解决方案1】:

我找到了 sed 的解决方法。在我的部署脚本中,我只需使用 sed 替换 docker-compose.yaml 文件中的值,然后用令牌替换它们,以便版本控制保持不变。看起来有点hacky,但它有效:)

eval "sed -i 's/MY_VERSION/$VERSION/' ../docker-compose.yaml"

cat ../docker-compose.yaml

terraform init 
terraform apply -auto-approve \
    -var "app_version=$VERSION" \
    -var "client_id=$ARM_CLIENT_ID" \
    -var "client_secret=$ARM_CLIENT_SECRET" \
    -var "tenant_id=$ARM_TENANT_ID" \
    -var "subscription_id=$ARM_SUBSCRIPTION_ID"

eval "sed -i 's/$VERSION/MY_VERSION/' ../docker-compose.yaml"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2021-04-09
    • 2012-03-10
    相关资源
    最近更新 更多