我已使用 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/