代码之家  ›  专栏  ›  技术社区  ›  bstricks

使用linux_fx_version定义Docker编写变量

  •  0
  • bstricks  · 技术社区  · 4 年前

    我该怎么办

    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
      }
    }
    

    我的所有地形都是从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-composite.yaml snipnet

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

    有什么想法吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   bstricks    4 年前

    我找到了一个与sed合作的机会。在我的部署脚本中,我只是使用sed替换docker-compose.yaml文件中的值,然后用令牌替换它们,这样版本控制就保持不变。看起来有点奇怪,但它奏效了:)

    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"
    
        2
  •  1
  •   Tuukka Salmi    3 年前

    您可以通过在中设置环境变量来传递变量 app_settings -块。所以添加 VERSION 当前app_settings中的环境变量:

      app_settings = {
        "VERSION" = "1"
        "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
      }
    

    然后,您当前的docker-compose.yml文件应该可以工作。