我正在嘗試將 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中文網其他相關文章!