我正在尝试将 Anchore syft 库嵌入到我的 Go 应用程序中,以便为多个容器生成 CycloneDX SBOM。下面的函数在第一次调用时执行良好,但当在 cobra 命令上调用 Execute 时,后续调用会失败并出现错误。
func generateCycloneDX(ociArchiveName string, jsonOutputName string) { syftId := clio.Identification{Name: "syft"} syftCommand := cli.Command(syftId) syftCommand.SetArgs([]string{ociArchiveName, "-o", jsonOutputName}) err := syftCommand.Execute() if err != nil { panic(err) } }
错误是
panic: replace existing redaction store (probably unintentional) goroutine 1 [running]: github.com/anchore/syft/internal/redact.Set(...) go/pkg/mod/github.com/anchore/[email protected]/internal/redact/redact.go:11 github.com/anchore/syft/cmd/syft/cli.create.func2(0xc000490a90?) go/pkg/mod/github.com/anchore/[email protected]/cmd/syft/cli/cli.go:64 +0x1a5 github.com/anchore/clio.(*application).runInitializers(0xc0013bc1a0) go/pkg/mod/github.com/anchore/[email protected]/application.go:110 +0x66 github.com/anchore/clio.(*application).PostLoad(0xc0013bc1a0) go/pkg/mod/github.com/anchore/[email protected]/application.go:105 +0xbb github.com/anchore/fangs.postLoad({0x1f81f40?, 0xc0013bc1a0?, 0xc0013bc1a0?}) go/pkg/mod/github.com/anchore/[email protected]/load.go:201 +0x1e5 github.com/anchore/fangs.loadConfig({{0x26109f8, 0x349e4e0}, {0x1ff3df6, 0x4}, {0x2004cda, 0xc}, {0x0, 0x0}, {0xc002b25e30, 0x5, ...}}, ...) go/pkg/mod/github.com/anchore/[email protected]/load.go:80 +0x7d1 github.com/anchore/fangs.Load({{0x26109f8, 0x349e4e0}, {0x1ff3df6, 0x4}, {0x2004cda, 0xc}, {0x0, 0x0}, {0xc002b25e30, 0x5, ...}}, ...) go/pkg/mod/github.com/anchore/[email protected]/load.go:16 +0x74 github.com/anchore/clio.(*application).loadConfigs(0xc0013bc1a0, 0xc000033870?, {0xc0004909f0, 0x1, 0xc0013b2700?}) go/pkg/mod/github.com/anchore/[email protected]/application.go:95 +0x1a5 github.com/anchore/clio.(*application).setupCommand.func1.(*application).Setup.func1(0x4?, {0xd631f2?, 0xc0013b2700?, 0xc000033af0?}) go/pkg/mod/github.com/anchore/[email protected]/application.go:74 +0x45 github.com/anchore/clio.(*application).setupCommand.func1(0xc0013b2700?, {0xc002e20870, 0x1, 0x3}) go/pkg/mod/github.com/anchore/[email protected]/application.go:316 +0x82 github.com/spf13/cobra.(*Command).execute(0xc000845200, {0xc002e20660, 0x3, 0x3}) go/pkg/mod/github.com/spf13/[email protected]/command.go:925 +0x7f6 github.com/spf13/cobra.(*Command).ExecuteC(0xc000845200) go/pkg/mod/github.com/spf13/[email protected]/command.go:1068 +0x3a5 github.com/spf13/cobra.(*Command).Execute(...) go/pkg/mod/github.com/spf13/[email protected]/command.go:992
我找不到重置 cobra 命令的方法,以便可以多次调用它。这可能吗?
我联系了 Anchore 社区,他们能够解决我的问题。
我需要直接使用 Syft 库,而不是通过 cobra 命令。
示例请参见https://www.php.cn/link/3b13b1eb44b05f57735764786fab9c2c
非常感谢克里斯托弗·菲利普斯
以上是嵌入 Go 应用程序时无法多次调用 Anchore syft 库命令的详细内容。更多信息请关注PHP中文网其他相关文章!