是否有一种方法可以使用golang客户端来插入docker版本?(未使用负责销售的副处长)
下面的代码将失败
client version 1.38 is too new. Maximum supported API version is 1.37直到最近,这段代码才正常运行。
go version go1.9.5 linux/amd64这里是:docker version
Client:
Version: 18.05.0-ce
API version: 1.37
Go version: go1.9.5
Git commit: f150324
Built: Wed May 9 22:16:25 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.05.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: f150324
Built: Wed May 9 22:14:32 2018
OS/Arch: linux/amd64
Experimental: false这会导致API版本不匹配。
package main
// kill off some containers
import (
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"golang.org/x/net/context"
"strings"
)
func main() {
ctx := context.Background()
cli, err := client.NewEnvClient()
if err != nil {
panic(err) // <--- crashes here due to API mismatch
}
containers, err := cli.ContainerList(ctx, types.ContainerListOptions{})
if err != nil {
panic(err)
}
for _, container := range containers {
if strings.Contains(container.Image, "enduser") || strings.Contains(container.Image, "admin") {
fmt.Println("\n we found enduser or admin so lets stop it\n")
fmt.Print("Stopping container ", container.ID[:10], "... ")
if err := cli.ContainerStop(ctx, container.ID, nil); err != nil {
panic(err)
}
fmt.Println("Success")
}
}
}在英语中,上述错误是因为github回购客户端库的默认客户端版本比Docker支持的版本更新。因此,要解决注释,一种可行的方法是请求较低版本的回购库来匹配Docker,而不是请求更高的版本。
下面的谈判方法也很好
client.NewClientWithOpts(client.WithAPIVersionNegotiation()),err :=
发布于 2019-07-29 19:29:31
我也有同样的问题,@zero298 298的回答对我来说非常有效
然后我找到了client.WithAPIVersionNegotiation(),这也奏效了!
如果您不需要固定版本,只想让代码与您的机器正在运行的任何版本一起工作,我认为此选项将满足您的需要。
发布于 2018-06-25 17:24:54
您可以使用NewClientWithOpts()专门要求一个版本。
package main
import (
"net/http"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"golang.org/x/net/context"
)
func main() {
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.WithVersion("1.37"))
if err != nil {
panic(err)
}
}见版本API和SDK。在尾端,它使用Go API和(尝试)链接到相关代码:
可以通过下列方式之一指定要使用的API版本:
docs硬链接到master分支上的行号,这可能已经改变了,但是上面的代码应该为您提供足够的上下文来理解。
发布于 2020-01-25 06:41:04
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
cli.NegotiateAPIVersion(ctx) // this line can negotiate API version客户端方法的NegotiateAPIVersion可以解决这一API版本错配问题。
https://stackoverflow.com/questions/51028784
复制相似问题