diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 219e87a5dd..c58bcfbf75 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -11,6 +11,7 @@ import ( "net/http" "net/http/httptest" "net/http/httputil" + "net/url" "os" "os/exec" "path" @@ -264,12 +265,32 @@ func (d *Daemon) Cmd(name string, arg ...string) (string, error) { return string(b), err } +func daemonHost() string { + daemonUrlStr := "unix:///var/run/docker.sock" + if daemonHostVar := os.Getenv("DOCKER_TEST_HOST"); daemonHostVar != "" { + daemonUrlStr = daemonHostVar + } + return daemonUrlStr +} + func sockRequest(method, endpoint string, data interface{}) ([]byte, error) { - // FIX: the path to sock should not be hardcoded - sock := filepath.Join("/", "var", "run", "docker.sock") - c, err := net.DialTimeout("unix", sock, time.Duration(10*time.Second)) + daemon := daemonHost() + daemonUrl, err := url.Parse(daemon) if err != nil { - return nil, fmt.Errorf("could not dial docker sock at %s: %v", sock, err) + return nil, fmt.Errorf("could not parse url %q: %v", daemon, err) + } + + var c net.Conn + switch daemonUrl.Scheme { + case "unix": + c, err = net.DialTimeout(daemonUrl.Scheme, daemonUrl.Path, time.Duration(10*time.Second)) + case "tcp": + c, err = net.DialTimeout(daemonUrl.Scheme, daemonUrl.Host, time.Duration(10*time.Second)) + default: + err = fmt.Errorf("unknown scheme %v", daemonUrl.Scheme) + } + if err != nil { + return nil, fmt.Errorf("could not dial docker daemon at %s: %v", daemon, err) } client := httputil.NewClientConn(c, nil)