// getDockerClient obtains a new Docker client from the environment or // from a Docker machine, starting it if necessary and permitted func getDockerClient(out io.Writer, dockerMachine string, canStartDockerMachine bool) (*docker.Client, *dockerclient.Client, error) { if len(dockerMachine) > 0 { glog.V(2).Infof("Getting client for Docker machine %q", dockerMachine) dockerClient, engineAPIClient, err := getDockerMachineClient(dockerMachine, out, canStartDockerMachine) if err != nil { return nil, nil, errors.ErrNoDockerMachineClient(dockerMachine, err) } return dockerClient, engineAPIClient, nil } dockerTLSVerify := os.Getenv("DOCKER_TLS_VERIFY") dockerCertPath := os.Getenv("DOCKER_CERT_PATH") if len(dockerTLSVerify) > 0 && len(dockerCertPath) == 0 { dockerCertPath = cliconfig.ConfigDir() os.Setenv("DOCKER_CERT_PATH", dockerCertPath) } if glog.V(4) { dockerHost := os.Getenv("DOCKER_HOST") if len(dockerHost) == 0 && len(dockerTLSVerify) == 0 && len(dockerCertPath) == 0 { glog.Infof("No Docker environment variables found. Will attempt default socket.") } if len(dockerHost) > 0 { glog.Infof("Will try Docker connection with host (DOCKER_HOST) %q", dockerHost) } else { glog.Infof("No Docker host (DOCKER_HOST) configured. Will attempt default socket.") } if len(dockerTLSVerify) > 0 { glog.Infof("DOCKER_TLS_VERIFY=%s", dockerTLSVerify) } if len(dockerCertPath) > 0 { glog.Infof("DOCKER_CERT_PATH=%s", dockerCertPath) } } dockerClient, _, err := dockerutil.NewHelper().GetClient() if err != nil { return nil, nil, errors.ErrNoDockerClient(err) } // FIXME: Workaround for docker engine API client on OS X - sets the default to // the wrong DOCKER_HOST string if runtime.GOOS == "darwin" { dockerHost := os.Getenv("DOCKER_HOST") if len(dockerHost) == 0 { os.Setenv("DOCKER_HOST", "unix:///var/run/docker.sock") } } engineAPIClient, err := dockerclient.NewEnvClient() if err != nil { return nil, nil, errors.ErrNoDockerClient(err) } if err = dockerClient.Ping(); err != nil { return nil, nil, errors.ErrCannotPingDocker(err) } glog.V(4).Infof("Docker ping succeeded") return dockerClient, engineAPIClient, nil }
// GetDockerClient will obtain a new Docker client from the environment or // from a Docker machine, starting it if necessary func (c *ClientStartConfig) GetDockerClient(out io.Writer) error { var err error if len(c.DockerMachine) > 0 { glog.V(2).Infof("Getting client for Docker machine %q", c.DockerMachine) c.dockerClient, err = getDockerMachineClient(c.DockerMachine, out) if err != nil { return errors.ErrNoDockerMachineClient(c.DockerMachine, err) } return nil } if glog.V(4) { dockerHost := os.Getenv("DOCKER_HOST") dockerTLSVerify := os.Getenv("DOCKER_TLS_VERIFY") dockerCertPath := os.Getenv("DOCKER_CERT_PATH") if len(dockerHost) == 0 && len(dockerTLSVerify) == 0 && len(dockerCertPath) == 0 { glog.Infof("No Docker environment variables found. Will attempt default socket.") } if len(dockerHost) > 0 { glog.Infof("Will try Docker connection with host (DOCKER_HOST) %q", dockerHost) } else { glog.Infof("No Docker host (DOCKER_HOST) configured. Will attempt default socket.") } if len(dockerTLSVerify) > 0 { glog.Infof("DOCKER_TLS_VERIFY=%s", dockerTLSVerify) } if len(dockerCertPath) > 0 { glog.Infof("DOCKER_CERT_PATH=%s", dockerCertPath) } } c.dockerClient, _, err = dockerutil.NewHelper().GetClient() if err != nil { return errors.ErrNoDockerClient(err) } if err = c.dockerClient.Ping(); err != nil { return errors.ErrCannotPingDocker(err) } glog.V(4).Infof("Docker ping succeeded") return nil }