我正在尝试使用ssh访问远程docker守护程序。我设法使用docker cli做到了这一点。
docker -H ssh:// user @ host映像
是否可以使用Golang Docker SDK执行相同的操作?
答案 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{}))
}