// dockerIsConnected checks to see if a docker daemon is available (local or remote) func dockerIsConnected(t *testing.T) bool { client, err := docker.NewClientFromEnv() if err != nil { return false } // Creating a client doesn't actually connect, so make sure we do something // like call Version() on it. env, err := client.Version() if err != nil { t.Logf("Failed to connect to docker daemon: %s", err) return false } t.Logf("Successfully connected to docker daemon running version %s", env.Get("Version")) return true }
func (d *DockerDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { // Get the current status so that we can log any debug messages only if the // state changes _, currentlyEnabled := node.Attributes[dockerDriverAttr] // Initialize docker API clients client, _, err := d.dockerClients() if err != nil { delete(node.Attributes, dockerDriverAttr) if currentlyEnabled { d.logger.Printf("[INFO] driver.docker: failed to initialize client: %s", err) } return false, nil } privileged := d.config.ReadBoolDefault(dockerPrivilegedConfigOption, false) if privileged { node.Attributes[dockerPrivilegedConfigOption] = "1" } // This is the first operation taken on the client so we'll try to // establish a connection to the Docker daemon. If this fails it means // Docker isn't available so we'll simply disable the docker driver. env, err := client.Version() if err != nil { if currentlyEnabled { d.logger.Printf("[DEBUG] driver.docker: could not connect to docker daemon at %s: %s", client.Endpoint(), err) } delete(node.Attributes, dockerDriverAttr) return false, nil } node.Attributes[dockerDriverAttr] = "1" node.Attributes["driver.docker.version"] = env.Get("Version") // Advertise if this node supports Docker volumes if d.config.ReadBoolDefault(dockerVolumesConfigOption, dockerVolumesConfigDefault) { node.Attributes["driver."+dockerVolumesConfigOption] = "1" } return true, nil }