使用Docker SDK for Golang通过SSH访问远程Docker守护程序

时间:2019-09-12 18:10:59

标签: docker

我正在尝试使用ssh访问远程docker守护程序。我设法使用docker cli做到了这一点。

docker -H ssh:// user @ host映像

是否可以使用Golang Docker SDK执行相同的操作?

1 个答案:

答案 0 :(得分:0)

浏览Docker CLI源代码后,我设法使用Golang Docker SDK进行了上述操作。下面是一个代码片段。

package main

import (
    "context"
    "fmt"
    "github.com/docker/cli/cli/connhelper"
    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
    "net/http"
    "os"
)

func main(){

    helper, err := connhelper.GetConnectionHelper("ssh://user@host:22")

    if err != nil{
        return
    }

    httpClient := &http.Client{
        // No tls
        // No proxy
        Transport: &http.Transport{
            DialContext: helper.Dialer,
        },
    }

    var clientOpts []client.Opt

    clientOpts = append(clientOpts,
        client.WithHTTPClient(httpClient),
        client.WithHost(helper.Host),
        client.WithDialContext(helper.Dialer),

    )

    version := os.Getenv("DOCKER_API_VERSION")

    if version != "" {
        clientOpts = append(clientOpts, client.WithVersion(version))
    } else {
        clientOpts = append(clientOpts, client.WithAPIVersionNegotiation())
    }


    cl, err := client.NewClientWithOpts(clientOpts...)


    if err != nil {
        fmt.Println("Unable to create docker client")
        panic(err)
    }

    fmt.Println(cl.ImageList(context.Background(), types.ImageListOptions{}))

}