问题:
在vault:0.10.2
泊坞映像中,我在以下位置有三个文件:
/home/myuser/token_helper
:Go中的令牌辅助程序二进制文件,根据this documentation
/home/myuser/vault_start
:运行os.exec("vault", "operator", "init")
和os.exec("vault", "server", "-config=myconfig.hcl")
/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
,但保险柜显然将其检测为空。
我已将该错误输出跟踪到保险柜的command
目录中的this file:根据该代码块,只有在未设置$HOME
时,它才会出错,但是我已经确认在外壳程序中设置了$HOME
。
此外,我已经根据this document指定了Vault为了实施令牌助手而要求的所有内容,但似乎并没有检测到配置文件来运行它。保管箱似乎是错误的,还是我遗漏了一些东西?
答案 0 :(得分:1)
弄清楚了,这是因为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`)}