diff --git a/kurtosis-devnet/pkg/build/docker.go b/kurtosis-devnet/pkg/build/docker.go index 59786af539dea..f19f977c0cbc6 100644 --- a/kurtosis-devnet/pkg/build/docker.go +++ b/kurtosis-devnet/pkg/build/docker.go @@ -56,6 +56,9 @@ func (p *defaultDockerProvider) newClient() (dockerClient, error) { opts := []client.Opt{client.FromEnv} // Check if default docker socket exists + // See https://github.com/moby/moby/discussions/46015 : + // the ParseHostURL function does not technically support `unix`, + // and the non-scheme part just ends up in the `.Host` instead of `.Path` hostURL, err := client.ParseHostURL(client.DefaultDockerHost) if err != nil { return nil, fmt.Errorf("failed to parse default docker host: %w", err) @@ -63,19 +66,22 @@ func (p *defaultDockerProvider) newClient() (dockerClient, error) { // For unix sockets, check if the socket file exists if hostURL.Scheme == "unix" { - if _, err := os.Stat(hostURL.Path); os.IsNotExist(err) { + if _, err := os.Stat(hostURL.Host); os.IsNotExist(err) { // Default socket doesn't exist, try alternate location. Docker Desktop uses ~/.docker/run/docker.sock + // Docker Desktop uses ~/.docker/run/docker.sock + // or also ~/.docker/desktop/docker.sock homeDir, err := os.UserHomeDir() if err != nil { return nil, fmt.Errorf("failed to get user home directory: %w", err) } - homeSocketPath := fmt.Sprintf("%s/.docker/run/docker.sock", homeDir) - if _, err := os.Stat(homeSocketPath); os.IsNotExist(err) { + homeSocketHost := fmt.Sprintf("%s/.docker/run/docker.sock", homeDir) + if _, err := os.Stat(homeSocketHost); os.IsNotExist(err) { return nil, errors.New("failed to find docker socket") } + log.Printf("WARNING: using implied user docker socket: %q, make sure Kurtosis is running inside of the same docker context!", homeSocketHost) socketURL := &url.URL{ Scheme: "unix", - Path: homeSocketPath, + Host: homeSocketHost, } // prepend the host, so that it can still be overridden by the environment. opts = append([]client.Opt{client.WithHost(socketURL.String())}, opts...)