问题:
我在以下位置的vault:0.10.2
docker 映像中有三个文件:
/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`)}