diff --git a/util/dockerutil/client.go b/util/dockerutil/client.go index c415e0dd..5a1ff36f 100644 --- a/util/dockerutil/client.go +++ b/util/dockerutil/client.go @@ -13,6 +13,9 @@ import ( // Client represents an active docker object. type Client struct { cli command.Cli + + featuresOnce sync.Once + featuresCache map[Feature]bool } // NewClient initializes a new docker client. @@ -64,6 +67,13 @@ func (c *Client) LoadImage(ctx context.Context, name string, status progress.Wri } func (c *Client) Features(ctx context.Context, name string) map[Feature]bool { + c.featuresOnce.Do(func() { + c.featuresCache = c.features(ctx, name) + }) + return c.featuresCache +} + +func (c *Client) features(ctx context.Context, name string) map[Feature]bool { features := make(map[Feature]bool) if dapi, err := c.API(name); err == nil { if info, err := dapi.Info(ctx); err == nil {