@@ -48,13 +48,34 @@ func getDockerClient() (*dockerclient.Client, error) {
4848 var err error
4949 cachedDockerClient , err = dockerclient .NewClientWithOpts (dockerclient .FromEnv )
5050 if err != nil {
51- return nil , err
51+ return nil , wrapDockerError ( err )
5252 }
5353
5454 cachedDockerClient .NegotiateAPIVersion (context .Background ())
5555 return cachedDockerClient , nil
5656}
5757
58+ func wrapDockerError (err error ) error {
59+ if dockerclient .IsErrConnectionFailed (err ) {
60+ return errors .New ("Unable to connect to the Docker daemon, please confirm Docker is running" )
61+ }
62+
63+ return errors .WithStack (err )
64+ }
65+
66+ func checkDockerRunning () error {
67+ docker , err := getDockerClient ()
68+ if err != nil {
69+ return err
70+ }
71+
72+ if _ , err := docker .Info (context .Background ()); err != nil {
73+ return wrapDockerError (err )
74+ }
75+
76+ return nil
77+ }
78+
5879func pullManager (clusterConfig * clusterconfig.ClusterConfig ) error {
5980 docker , err := getDockerClient ()
6081 if err != nil {
@@ -63,7 +84,7 @@ func pullManager(clusterConfig *clusterconfig.ClusterConfig) error {
6384
6485 images , err := docker .ImageList (context .Background (), dockertypes.ImageListOptions {})
6586 if err != nil {
66- return err
87+ return wrapDockerError ( err )
6788 }
6889
6990 for _ , image := range images {
@@ -76,7 +97,7 @@ func pullManager(clusterConfig *clusterconfig.ClusterConfig) error {
7697
7798 pullOutput , err := docker .ImagePull (context .Background (), clusterConfig .ImageManager , dockertypes.ImagePullOptions {})
7899 if err != nil {
79- return err
100+ return wrapDockerError ( err )
80101 }
81102 defer pullOutput .Close ()
82103
@@ -92,11 +113,14 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
92113 return "" , err
93114 }
94115
95- pullManager (clusterConfig )
116+ err = pullManager (clusterConfig )
117+ if err != nil {
118+ return "" , err
119+ }
96120
97121 clusterConfigBytes , err := yaml .Marshal (clusterConfig )
98122 if err != nil {
99- return "" , err
123+ return "" , errors . WithStack ( err )
100124 }
101125 if err := files .WriteFile (clusterConfigBytes , cachedClusterConfigPath ); err != nil {
102126 return "" , err
@@ -129,7 +153,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
129153
130154 containerInfo , err := docker .ContainerCreate (context .Background (), containerConfig , hostConfig , nil , "" )
131155 if err != nil {
132- errors . Exit (err )
156+ return "" , wrapDockerError (err )
133157 }
134158
135159 removeContainer := func () {
@@ -154,7 +178,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
154178
155179 err = docker .ContainerStart (context .Background (), containerInfo .ID , dockertypes.ContainerStartOptions {})
156180 if err != nil {
157- return "" , err
181+ return "" , wrapDockerError ( err )
158182 }
159183
160184 // There is a slight delay between the container starting at attaching to it, hence the sleep in Cmd
@@ -164,7 +188,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
164188 Stderr : true ,
165189 })
166190 if err != nil {
167- return "" , err
191+ return "" , wrapDockerError ( err )
168192 }
169193 defer logsOutput .Close ()
170194
@@ -173,7 +197,7 @@ func runManagerCommand(entrypoint string, clusterConfig *clusterconfig.ClusterCo
173197
174198 _ , err = io .Copy (os .Stdout , tee )
175199 if err != nil {
176- return "" , err
200+ return "" , errors . WithStack ( err )
177201 }
178202
179203 output := outputBuffer .String ()
0 commit comments