Skip to content

Instantly share code, notes, and snippets.

@Roxxers
Forked from agbaraka/docker_remote.go
Created July 16, 2021 07:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Roxxers/66226e14d4f471943ea80cedabbba0c8 to your computer and use it in GitHub Desktop.
Save Roxxers/66226e14d4f471943ea80cedabbba0c8 to your computer and use it in GitHub Desktop.
Access remote docker daemon via ssh using 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://albert@34.66.xx.xx: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{}))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment