You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Compose启动时从Azure Key Vault获取密钥的正确方法?

从Azure Key Vault获取密钥到Docker Compose的方案

针对你的场景(Azure VM与Key Vault同虚拟网络),有几种简洁安全的方案可以替代手动输入密钥,以下是具体实现方式:

方案1:环境变量插值+Azure CLI(快速实现)

Docker Compose支持读取系统环境变量,你可以先通过Azure CLI从Key Vault取出密钥并设为环境变量,再让Compose加载这个变量:

  1. 确保VM已安装Azure CLI,且当前用户/VM有权访问Key Vault,执行命令导出密钥到环境变量:
export PGSQL_PSWD=$(az keyvault secret show --name <你的密码密钥名称> --vault-name <你的Key Vault名称> --query value -o tsv)
  1. 修改docker-compose.yml,用${变量名}引用环境变量:
version: '2'
services:
  backend:
    image: myimage:0.1
    restart: unless-stopped
    ports:
      - 2300:2300
    environment:
      - PGSQL_HOST=mydns.postgres.database.azure.com
      - PGSQL_PORT=5432
      - PGSQL_USERNAME=postgres@mypostgres
      - PGSQL_PSWD=${PGSQL_PSWD}
  1. 正常执行docker compose up -d即可,Compose会自动读取环境变量填充配置。

方案2:.env文件管理(适合多密钥场景)

如果需要管理多个密钥,用.env文件更直观:

  1. 执行命令将密钥写入.env文件(注意不要把此文件提交到版本控制):
echo "PGSQL_PSWD=$(az keyvault secret show --name <你的密码密钥名称> --vault-name <你的Key Vault名称> --query value -o tsv)" > .env
  1. docker-compose.yml配置和方案1一致,Compose会自动加载当前目录下的.env文件,直接执行docker compose up -d即可。

方案3:Azure Managed Identity(最安全,无手动凭证)

因为服务部署在Azure VM上,推荐用托管标识实现无密钥访问Key Vault,避免手动登录CLI或存储凭证:

  1. 给VM分配系统托管标识:

    • 在Azure Portal找到你的VM,进入「身份」选项卡,启用系统分配的标识。
  2. 给标识授权访问Key Vault:

    • 进入Key Vault的「访问策略」选项卡,添加新策略,选择「密钥权限」中的「获取」,再选择VM的系统托管标识作为主体。
  3. 在VM上配置Azure CLI用托管标识登录:

az login --identity
  1. 写一个启动脚本start.sh自动获取密钥并启动服务:
#!/bin/bash
export PGSQL_PSWD=$(az keyvault secret show --name <你的密码密钥名称> --vault-name <你的Key Vault名称> --query value -o tsv)
docker compose up -d

给脚本加执行权限chmod +x start.sh,之后运行./start.sh即可启动服务,全程无需手动输入凭证。

关于直接在docker-compose中插入密钥的说明

Docker Compose本身不支持直接在配置文件中执行Azure CLI命令动态拉取密钥,无法直接在PGSQL_PSWD:后写命令。必须通过环境变量或脚本先获取密钥,再让Compose读取。

内容的提问来源于stack exchange,提问作者erni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:55:00