python - 如何为容器 "use".env变量创建Azure应用服务?

标签 python azure docker azure-devops dotenv

我已使用 Azure 应用服务从容器注册表中的 Docker 容器部署了一个 Python Web 应用。在我的应用程序中,我使用 dotenv 加载 secret ,并在本地运行 docker run --env-file=.env my-container 来传递 .env 变量,但我真的不知道部署到 Azure 时该怎么做?

我按以下方式使用 dotenv:

import os
from dotenv import load_dotenv

load_dotenv()

SERVER = os.getenv("SERVER_NAME")
DATABASE = os.getenv("DB_NAME")
USERNAME = os.getenv("USERNAME")
PASSWORD = os.getenv("PASSWORD")
PORT = os.getenv("PORT", default=1433)
DRIVER = os.getenv("DRIVER")

如何让我的容器获取 .env 变量?

我已将 secret 添加到 Azure Key Vault,但我不确定如何将这些 secret 传递到容器。

最佳答案

在将变量传递给 Dockerfile 方面,请检查我的答案 here

请在 from 之后添加参数

FROM alpine

ARG serverName
RUN echo $serverName

然后像这样运行

- task: Docker@2
  inputs:
    containerRegistry: 'devopsmanual-acr'
    command: 'build'
    Dockerfile: 'stackoverflow/85-docker/DOCKERFILE'
    arguments: '--build-arg a_version=$(SERVER_NAME)'

在从 KeyVault 获取值方面,您可以使用 Azure Key Vault task

# Azure Key Vault
# Download Azure Key Vault secrets
- task: AzureKeyVault@1
  inputs:
    azureSubscription: 
    keyVaultName: 
    secretsFilter: '*'
    runAsPreJob: false # Azure DevOps Services only

请注意,默认情况下,此任务创建的变量被标记为 secret ,因此它们不会映射到环境变量。

You can still try to use your approach but first you need to map it.

- powershell: |
    Write-Host "Using an input-macro works: $(mySecret)"
    Write-Host "Using the env var directly does not work: $env:MYSECRET"
    Write-Host "Using a global secret var mapped in the pipeline does not work either: $env:GLOBAL_MYSECRET"
    Write-Host "Using a global non-secret var mapped in the pipeline works: $env:GLOBAL_MY_MAPPED_ENV_VAR" 
    Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
  env:
    MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable

关于python - 如何为容器 "use".env变量创建Azure应用服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67599135/

相关文章:

python - SAS 访问 blob 容器 (azure/python)

python - 在缺少测量且仅知道位置的情况下进行卡尔曼滤波器预测

c# - "InvalidOperationException: IDX20803: Unable to obtain configuration from: ' [PII 被隐藏] '"

azure - Azure 中 docker compose 的存储卷位于何处?

docker - 如何更改Docker镜像开始

python - Python Tornado 的 Defacto 项目模板

python - 如何在 wxPython 应用程序中使用 py2exe icon_resources?

Azure:CacheInstaller 和 ConfigStoreException

c# - CloudConfigurationManager.GetSetting(<setting>, false); 的完整、直接的 .NET Core 等效项是什么?

azure - 如何将 C# 字符串表达式转换为逻辑应用表达式以替换变量数据