如何解决docker cli swarm 包导入问题
我正在尝试在我自己的项目中利用 docker/cli 客户端库来创建/管理堆栈。
但是,我在构建项目时遇到了问题。
代码如下:
package main
import (
"fmt"
"log"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/stack"
"github.com/docker/cli/cli/flags"
)
func main() {
cli,err := command.NewDockerCli(command.WithStandardStreams())
if err != nil {
log.Fatal(err)
}
cli.Initialize(flags.NewClientOptions())
cmd := stack.NewStackCommand(cli)
cmd.SetArgs([]string{"deploy","--compose-file","docker-compose.yml","test"})
err = cmd.Execute()
if err != nil {
log.Fatal(err)
}
fmt.Println("success!")
}
我已经设置了一个最小的 go.mod:
module github.com/dev/test
go 1.16
当我运行 go get
;我收到以下错误:
github.com/dev/test imports
github.com/docker/cli/cli/command/stack imports
github.com/docker/cli/cli/command/service imports
github.com/docker/swarmkit/api/defaults: cannot find module providing package github.com/docker/swarmkit/api/defaults
github.com/dev/test imports
github.com/docker/cli/cli/command/stack imports
github.com/docker/cli/cli/command/service imports
github.com/docker/swarmkit/api/genericresource: cannot find module providing package github.com/docker/swarmkit/api/genericresource
github.com/dev/test imports
github.com/docker/cli/cli/command/stack imports
github.com/docker/cli/cli/command/service imports
github.com/docker/swarmkit/api imports
google.golang.org/grpc/transport: cannot find module providing package google.golang.org/grpc/transport
我更深入地研究了 docker/cli 存储库,似乎该项目没有使用 go 模块;而是使用旧的 vendor
dir 方法。
我想知道如何让项目编译。有没有办法让 go get
自动引用导入的 vendor
项目的 docker/cli
目录中的包?
解决方法
默认情况下,go
命令只会添加模块的最新标记版本,以解决缺少的依赖项。
根据 https://github.com/docker/swarmkit/tags 的说法,github.com/docker/swarmkit
的最新(也是唯一)标记版本是 v1.12.0
,早在 2016 年(!),并且在那个时间点 {{1} } 和 api/defaults
包尚不存在。
您可以通过显式传递版本的提交哈希或分支名称来要求 api/genericresource
命令提供比标记更新的依赖项版本。例如,截至我撰写此评论时的最新提交是 go
,因此您可以将该提交传递给 2dcf70aafdc9ea55af3aaaeca440638cde0ecda6
,并且它似乎从那时开始正确构建:
go get
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。