From 780c28dba776ea461e5667f335d1d3bc3070704c Mon Sep 17 00:00:00 2001 From: David Gageot Date: Mon, 3 Oct 2022 15:16:21 +0200 Subject: [PATCH] Memoize docker client to avoid consuming a new ssh connection each time Signed-off-by: David Gageot --- src/cmd/linuxkit/docker/cmd.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cmd/linuxkit/docker/cmd.go b/src/cmd/linuxkit/docker/cmd.go index 4e5ab650c..00fdeb374 100644 --- a/src/cmd/linuxkit/docker/cmd.go +++ b/src/cmd/linuxkit/docker/cmd.go @@ -5,6 +5,7 @@ import ( "errors" "io" "os" + "sync" "github.com/containerd/containerd/reference" "github.com/docker/cli/cli/connhelper" @@ -14,12 +15,23 @@ import ( log "github.com/sirupsen/logrus" ) +var ( + clientOnce sync.Once + memoizedClient *client.Client + errClient error +) + // Client get a docker client. func Client() (*client.Client, error) { + clientOnce.Do(func() { + memoizedClient, errClient = createClient() + }) + return memoizedClient, errClient +} + +func createClient() (*client.Client, error) { options := []client.Opt{ - // for maximum compatibility as we use nothing new - // 1.30 corresponds to Docker 17.06, supported until 2020. - client.WithVersion("1.30"), + client.WithAPIVersionNegotiation(), client.WithTLSClientConfigFromEnv(), client.WithHostFromEnv(), }