// EnsureDocker attempts to connect to the Docker daemon defined by the helper, // and if it is unable to it will print a warning. func (c *NodeConfig) EnsureDocker(docker *dockerutil.Helper) { dockerClient, dockerAddr := docker.GetClientOrExit() if err := dockerClient.Ping(); err != nil { c.HandleDockerError(fmt.Sprintf("Docker could not be reached at %s. Docker must be installed and running to start containers.\n%v", dockerAddr, err)) return } glog.Infof("Connecting to Docker at %s", dockerAddr) env, err := dockerClient.Version() if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to check for Docker server version.\n%v", err)) return } serverVersionString := env.Get("ApiVersion") serverVersion, err := dockerclient.NewAPIVersion(serverVersionString) if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to determine Docker server version from %q.\n%v", serverVersionString, err)) return } minimumPullByIDVersion, err := dockerclient.NewAPIVersion(minimumDockerAPIVersionWithPullByID) if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to check for Docker server version.\n%v", err)) return } if serverVersion.LessThan(minimumPullByIDVersion) { c.HandleDockerError(fmt.Sprintf("Docker 1.6 or later (server API version 1.18 or later) required.")) return } c.DockerClient = dockerClient }
func checkDockerVersion() error { startCheck("Docker up to date") dockerVersionTest, err := docker.NewClientFromEnv() if err != nil { return err } minDockerVersion, err := docker.NewAPIVersion("1.9") e, err := dockerVersionTest.Version() if err != nil { return err } currentVersionParts := strings.Split(e.Get("Version"), ".") currentVersion, err := docker.NewAPIVersion(fmt.Sprintf("%s.%s", currentVersionParts[0], currentVersionParts[1])) if err != nil { return err } if !(currentVersion.GreaterThanOrEqualTo(minDockerVersion)) { diagnose(Diagnosis{ Title: "Docker up to date", Description: "<fail>Docker engine is out of date (min: 1.9)</fail>", DocsLink: "https://docs.docker.com/engine/installation/", Kind: "fail", }) } else { diagnose(Diagnosis{ Title: "Docker up to date", Kind: "success", }) } return nil }
// EnsureDocker attempts to connect to the Docker daemon defined by the helper, // and if it is unable to it will print a warning. func (c *NodeConfig) EnsureDocker(docker *dockerutil.Helper) { dockerClient, dockerAddr, err := docker.GetClient() if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to create a Docker client for %s - Docker must be installed and running to start containers.\n%v", dockerAddr, err)) return } if url, err := url.Parse(dockerAddr); err == nil && url.Scheme == "unix" && len(url.Path) > 0 { s, err := os.Stat(url.Path) switch { case os.IsNotExist(err): c.HandleDockerError(fmt.Sprintf("No Docker socket found at %s. Have you started the Docker daemon?", url.Path)) return case os.IsPermission(err): c.HandleDockerError(fmt.Sprintf("You do not have permission to connect to the Docker daemon (via %s). This process requires running as the root user.", url.Path)) return case err == nil && s.IsDir(): c.HandleDockerError(fmt.Sprintf("The Docker socket at %s is a directory instead of a unix socket - check that you have configured your connection to the Docker daemon properly.", url.Path)) return } } if err := dockerClient.Ping(); err != nil { c.HandleDockerError(fmt.Sprintf("Docker could not be reached at %s. Docker must be installed and running to start containers.\n%v", dockerAddr, err)) return } glog.Infof("Connecting to Docker at %s", dockerAddr) env, err := dockerClient.Version() if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to check for Docker server version.\n%v", err)) return } serverVersionString := env.Get("ApiVersion") serverVersion, err := dockerclient.NewAPIVersion(serverVersionString) if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to determine Docker server version from %q.\n%v", serverVersionString, err)) return } minimumPullByIDVersion, err := dockerclient.NewAPIVersion(minimumDockerAPIVersionWithPullByID) if err != nil { c.HandleDockerError(fmt.Sprintf("Unable to check for Docker server version.\n%v", err)) return } if serverVersion.LessThan(minimumPullByIDVersion) { c.HandleDockerError(fmt.Sprintf("Docker 1.6 or later (server API version 1.18 or later) required.")) return } c.DockerClient = dockerClient }
func TestVersion(t *testing.T) { fakeDocker := &FakeDockerClient{VersionInfo: docker.Env{"Version=1.1.3", "ApiVersion=1.15"}} manager := &DockerManager{client: fakeDocker} version, err := manager.Version() if err != nil { t.Errorf("got error while getting docker server version - %s", err) } expectedVersion, _ := docker.NewAPIVersion("1.15") if e, a := expectedVersion.String(), version.String(); e != a { t.Errorf("invalid docker server version. expected: %v, got: %v", e, a) } }