Skip to content

Commit f5a4cef

Browse files
committed
Correct closing the client to avoid panics over nil clients
1 parent 0a584c5 commit f5a4cef

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

docker.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import (
77
"encoding/json"
88
"errors"
99
"fmt"
10-
"github.com/docker/docker/api/types/image"
11-
"github.com/docker/docker/api/types/registry"
1210
"io"
1311
"log"
1412
"net/http"
1513
"os"
1614
"strings"
1715

16+
"github.com/docker/docker/api/types/image"
17+
"github.com/docker/docker/api/types/registry"
18+
1819
"github.com/docker/docker/api/types/filters"
1920
"github.com/docker/docker/client"
2021
docker "github.com/fsouza/go-dockerclient"
@@ -24,15 +25,17 @@ import (
2425
func PullImage(imageid string) error {
2526
ctx := context.Background()
2627
dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
27-
defer func(dockerClient *client.Client) {
28-
err := dockerClient.Close()
29-
if err != nil {
30-
log.Print(err)
31-
}
32-
}(dockerClient)
3328
if err != nil {
3429
return err
3530
}
31+
defer func(dockerClient *client.Client) {
32+
if dockerClient != nil {
33+
err := dockerClient.Close()
34+
if err != nil {
35+
log.Print(err)
36+
}
37+
}
38+
}(dockerClient)
3639

3740
authConfig := registry.AuthConfig{
3841
Username: os.Getenv("DOCKER_USER"),
@@ -64,15 +67,17 @@ func PullImage(imageid string) error {
6467
func SaveImage(imageid string, folder string) error {
6568
ctx := context.Background()
6669
dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
67-
defer func(dockerClient *client.Client) {
68-
err := dockerClient.Close()
69-
if err != nil {
70-
log.Print(err)
71-
}
72-
}(dockerClient)
7370
if err != nil {
7471
return err
7572
}
73+
defer func(dockerClient *client.Client) {
74+
if dockerClient != nil {
75+
err := dockerClient.Close()
76+
if err != nil {
77+
log.Print(err)
78+
}
79+
}
80+
}(dockerClient)
7681
imageFileName := strings.ReplaceAll(imageid, "/", "_")
7782
imageFileName = strings.Replace(imageFileName, ":", "_", 1)
7883
imageFileName = RemoveDoubleDots(imageFileName)
@@ -106,15 +111,17 @@ func SaveImage(imageid string, folder string) error {
106111
func ImageExists(imageid string) (bool, error) {
107112
ctx := context.Background()
108113
dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
109-
defer func(dockerClient *client.Client) {
110-
err := dockerClient.Close()
111-
if err != nil {
112-
log.Print(err)
113-
}
114-
}(dockerClient)
115114
if err != nil {
116115
return false, err
117116
}
117+
defer func(dockerClient *client.Client) {
118+
if dockerClient != nil {
119+
err := dockerClient.Close()
120+
if err != nil {
121+
log.Print(err)
122+
}
123+
}
124+
}(dockerClient)
118125
imgs, err := dockerClient.ImageList(ctx, image.ListOptions{
119126
All: false,
120127
Filters: filters.Args{},

0 commit comments

Comments
 (0)