未检测到 Vault Token Helper?

Vault Token Helper not being detected?

问题:

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

/home/myuser/token_helper:Go 中的令牌助手二进制文件,根据 this documentation

实现令牌助手接口

/home/myuser/vault_start:运行s 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 returns /usr/bin/getent,图像$PATH包含它,证明两者都存在。此外,配置路径不是 "",而是设置为 /home/myuser/.vault,但 Vault 显然将其检测为空。

我已将错误输出追踪到 Vault 的 command 目录中的 this file:。根据该代码块,它仅在未设置 $HOME 时出错,但我已确认 $HOME 已在 shell 中设置。

此外,为了根据 this document 实施令牌助手,我已经指定了 Vault 要求的所有内容,但它似乎没有检测到 运行 的配置文件它。这似乎是 Vault 的错误,还是我遗漏了什么?

想通了,是因为os.exec("vault", "operator", "init")行没有继承host的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`)}