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

PowerShell调用Docker执行HashiCorp Vault命令报错问题排查与解决

诡异的Vault kv put执行问题

这是我职业生涯中遇到的最诡异的问题之一:

我编写了如下PowerShell代码:

$string="$($VAULT_SETTINGS.SECRETS_ENGINE_PATH)/$($VAULT_SETTINGS.SECRETS_SOLUTION_NAME)/Database__ConnectionString default=`"Server=$($DB_SETTINGS.SERVICE_NAME);Initial Catalog=$($DB_SETTINGS.InitialCatalog);User=$($DB_SETTINGS.DbUser);Password=$($DB_SETTINGS.DbPassword);MultipleActiveResultSets=True;Application Name=$($DB_SETTINGS.APPLICATION_NAME);Encrypt=True;Connection Timeout=180`""
docker exec $($VAULT_SETTINGS.SERVICE_NAME) vault kv put $string
 
$string="$($VAULT_SETTINGS.SECRETS_ENGINE_PATH)/$($VAULT_SETTINGS.SECRETS_SOLUTION_NAME)/Database__ConnectivityConnectionString default=`"Server=$($DB_SETTINGS.SERVICE_NAME);User=$($DB_SETTINGS.DbUser);Password=$($DB_SETTINGS.DbPassword);MultipleActiveResultSets=True;Application Name=$($DB_SETTINGS.APPLICATION_NAME);Encrypt=True;Connection Timeout=180`""
docker exec $($VAULT_SETTINGS.SERVICE_NAME) vault kv put $string

所有变量均为字母数字格式,无空格或特殊符号。运行环境为完全更新的Windows 11,使用最新版HashiCorp Vault与Docker 20.10.17。

最初以为第一条命令执行正常(后发现同样异常),第二条命令返回500错误。经过一下午排查发现,若在第二条命令的连接字符串中给User或Password添加空格(如Us er),命令即可正常执行。但如果通过Write-Host输出命令并复制粘贴执行,两条命令均能正常运行。

解决方案

耗时4小时排查后发现,原写法会导致HashiCorp Vault将请求按第一个分号拆分为两个键值对,两条命令均存在问题。正确写法如下:

$string="Server=$($DB_SETTINGS.SERVICE_NAME);User=$($DB_SETTINGS.DbUser);Password=$($DB_SETTINGS.DbPassword);MultipleActiveResultSets=True;Application Name=$($DB_SETTINGS.APPLICATION_NAME);Encrypt=True;Connection Timeout=180"
docker exec $($VAULT_SETTINGS.SERVICE_NAME) vault kv put "$($VAULT_SETTINGS.SECRETS_ENGINE_PATH)/$($VAULT_SETTINGS.SECRETS_SOLUTION_NAME)/Database__ConnectivityConnectionString" default="$string"

目前问题已解决,但暂不清楚为何必须给$string添加引号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:18