未检测到保管库令牌帮助程序?



问题:

我在以下位置的vault:0.10.2docker 映像中有三个文件:

/home/myuser/token_helper:Go 中的令牌帮助程序二进制文件,根据本文档实现令牌帮助程序接口

/home/myuser/vault_start:运行os.exec("vault", "operator", "init")os.exec("vault", "server", "-config=myconfig.hcl")的 Go 脚本

/home/myuser/.vault:指定令牌帮助程序二进制位置的令牌帮助程序配置文件,我已导出VAULT_CONFIG_PATH以指向此路径。该文件读取token_helper = "/home/myuser/token_helper"

我看到的问题是在运行vault_start脚本时,出现以下错误:

failed to get token helper: error expanding config path "": exec: "getent": executable file not found in $PATH

到目前为止已完成的调试

此错误似乎不正确。which getent返回/usr/bin/getent,并且图像$PATH包含它,证明两者都存在。此外,配置路径不"",它被设置为/home/myuser/.vault但 Vault 显然将其检测为空。

我已经将错误输出追溯到 Vaultcommand目录中的此文件:。根据该代码块,它仅在未设置$HOME时才出错,但我已经确认$HOME是在 shell 中设置的。

此外,我已经指定了 Vault 要求的所有内容,以便根据本文档实现令牌帮助程序,但它似乎没有检测到运行它的配置文件。这似乎是保险柜的错误,还是我错过了什么?

想通了,这是因为os.exec("vault", "operator", "init")行没有从主机继承VAULT_CONFIG_PATH变量设置,所以它是空的。

下面显示了如何在运行期间提供os.Exec环境变量:

vaultInitCmd := exec.Command("vault", "operator", "init")
vaultInitCmd.Env = []string{
fmt.Sprintf(`VAULT_ADDR=%s`, addr),
fmt.Sprintf(`VAULT_CONFIG_PATH=%s`, `/home/myuser/.vault`)}

最新更新