Sco*_*and 14 versioning go docker
有没有办法使用golang客户端固定docker API版本?(没有使用dep进行销售)
下面的代码失败了
client version 1.38 is too new. Maximum supported API version is 1.37
Run Code Online (Sandbox Code Playgroud)
这段代码直到最近还运行良好
go version go1.9.5 linux/amd64
Run Code Online (Sandbox Code Playgroud)
这是 : 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
Run Code Online (Sandbox Code Playgroud)
这会导致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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
zer*_*298 26
你可以要求专门的版本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)
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅Versioned API和SDK.在尾端,它使用Go API和(尝试)链接到相关代码:
您可以通过以下方式之一指定要使用的API版本:
...
...
...
对于SDK,您还可以以编程方式指定API版本,作为
client
对象的参数.请参阅Go构造函数 或Python SDK文档client
.
文档硬链接到master
分支上可能已更改的行号,但上面的代码应该为您提供足够的上下文来理解.
我遇到了完全相同的问题,@ zero298的答案对我来说很完美=)
然后我发现了client.WithAPIVersionNegotiation()
,那也行得通!
如果您不需要固定版本,而只想让代码与计算机正在运行的任何版本一起使用,我认为此选项将满足您的需求。
归档时间: |
|
查看次数: |
6315 次 |
最近记录: |