我需要知道Docker Daemon API版本,并在我必须使用NewEnvClient()创建Docker客户端时设置DOCKER_API_VERSION的环境变量,否则我会得到一个错误:
DOCKER_API_VERSION
Error response from daemon: client version 1.36 is too new. Maximum supported API version is 1.35
字符串
k97glaaz1#
如果你在同一个docker主机上执行你的代码,你可以使用下面的方法来获取API版本。它执行docker version命令并从该输出中获取API版本。
docker version
package main import ( "os/exec" "bytes" "os" "github.com/docker/docker/client" "golang.org/x/net/context" "github.com/docker/docker/api/types" "strings" ) func main() { cmd := exec.Command("docker", "version", "--format", "{{.Server.APIVersion}}") cmdOutput := &bytes.Buffer{} cmd.Stdout = cmdOutput err := cmd.Run() if err != nil { panic(err) } apiVersion := strings.TrimSpace(string(cmdOutput.Bytes())) // TODO: (optional) verify the api version is in the correct format(a.b) os.Setenv("DOCKER_API_VERSION", apiVersion) // execute docker commands ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) } _, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) if err != nil { panic(err) } }
8dtrkrch2#
您可以使用ClientVersion函数调用来获取版本,而最好通过使用NewClientWithOpts中的client.WithAPIVersionNegotiation()来协商API版本。如果您有兴趣从本地直接调用API,您可以使用下面的命令,它可以为您提供比API版本更详细的信息。
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -X GET "http://localhost/version" -H "X-Registry-Auth:<encoded key>" | jq '.ApiVersion' "1.41"
2条答案
按热度按时间k97glaaz1#
如果你在同一个docker主机上执行你的代码,你可以使用下面的方法来获取API版本。它执行
docker version
命令并从该输出中获取API版本。字符串
8dtrkrch2#
您可以使用ClientVersion函数调用来获取版本,而最好通过使用NewClientWithOpts中的client.WithAPIVersionNegotiation()来协商API版本。如果您有兴趣从本地直接调用API,您可以使用下面的命令,它可以为您提供比API版本更详细的信息。
字符串