@@ -2,8 +2,9 @@ package docker
2
2
3
3
import (
4
4
"os"
5
+ "path"
5
6
6
- "github.com/fsouza/go-dockerclient"
7
+ docker "github.com/fsouza/go-dockerclient"
7
8
"github.com/golang/glog"
8
9
"github.com/spf13/pflag"
9
10
)
@@ -26,10 +27,16 @@ func (_ *Helper) InstallFlags(flags *pflag.FlagSet) {
26
27
27
28
// GetClient returns a valid Docker client, the address of the client, or an error
28
29
// if the client couldn't be created.
29
- func (_ * Helper ) GetClient () (* docker.Client , string , error ) {
30
- addr := getDockerEndpoint ("" )
31
- client , err := docker .NewClient (addr )
32
- return client , addr , err
30
+ func (_ * Helper ) GetClient () (client * docker.Client , endpoint string , err error ) {
31
+ cfg := getDockerConfig ("" )
32
+ endpoint = cfg .Endpoint
33
+
34
+ if cfg .IsTLS () {
35
+ client , err = docker .NewTLSClient (cfg .Endpoint , cfg .Cert (), cfg .Key (), cfg .CA ())
36
+ return
37
+ }
38
+ client , err = docker .NewClient (cfg .Endpoint )
39
+ return
33
40
}
34
41
35
42
// GetClientOrExit returns a valid Docker client and the address of the client,
@@ -42,15 +49,39 @@ func (h *Helper) GetClientOrExit() (*docker.Client, string) {
42
49
return client , addr
43
50
}
44
51
45
- func getDockerEndpoint (dockerEndpoint string ) string {
46
- var endpoint string
52
+ type dockerConfig struct {
53
+ Endpoint string
54
+ CertPath string
55
+ }
56
+
57
+ func (c * dockerConfig ) IsTLS () bool {
58
+ return len (c .CertPath ) > 0
59
+ }
60
+
61
+ func (c * dockerConfig ) Cert () string {
62
+ return path .Join (c .CertPath , "cert.pem" )
63
+ }
64
+
65
+ func (c * dockerConfig ) Key () string {
66
+ return path .Join (c .CertPath , "key.pem" )
67
+ }
68
+
69
+ func (c * dockerConfig ) CA () string {
70
+ return path .Join (c .CertPath , "ca.pem" )
71
+ }
72
+
73
+ func getDockerConfig (dockerEndpoint string ) * dockerConfig {
74
+ cfg := & dockerConfig {}
47
75
if len (dockerEndpoint ) > 0 {
48
- endpoint = dockerEndpoint
76
+ cfg . Endpoint = dockerEndpoint
49
77
} else if len (os .Getenv ("DOCKER_HOST" )) > 0 {
50
- endpoint = os .Getenv ("DOCKER_HOST" )
78
+ cfg . Endpoint = os .Getenv ("DOCKER_HOST" )
51
79
} else {
52
- endpoint = "unix:///var/run/docker.sock"
80
+ cfg . Endpoint = "unix:///var/run/docker.sock"
53
81
}
54
82
55
- return endpoint
83
+ if os .Getenv ("DOCKER_TLS_VERIFY" ) == "1" {
84
+ cfg .CertPath = os .Getenv ("DOCKER_CERT_PATH" )
85
+ }
86
+ return cfg
56
87
}
0 commit comments