slimtoolkit/slim · error

no unix socket found

Error message

no unix socket found

What it means

In New(), after GetUnixSocketAddr succeeds, the client defensively re-checks that the returned socketInfo is non-nil and has a non-empty Address before connecting; otherwise it returns "no unix socket found". This is an inconsistency guard: GetUnixSocketAddr already errors when nothing is found, so hitting this means discovery returned an empty/nil result without an error.

Source

Thrown at pkg/docker/dockerclient/client.go:225

		log.Debug("dockerclient.New: new Docker client (TLS,no verify) [4]")

	case config.Env[EnvDockerHost] != "":
		client, err = docker.NewClientFromEnv()
		if err != nil {
			return nil, err
		}

		log.Debug("dockerclient.New: new Docker client (env) [5]")

	case config.Host == "" && config.Env[EnvDockerHost] == "":
		socketInfo, err := GetUnixSocketAddr()
		if err != nil {
			return nil, err
		}

		if socketInfo == nil || socketInfo.Address == "" {
			return nil, fmt.Errorf("no unix socket found")
		}

		if socketInfo.CanRead == false || socketInfo.CanWrite == false {
			return nil, fmt.Errorf("insufficient socket permissions (can_read=%v can_write=%v)", socketInfo.CanRead, socketInfo.CanWrite)
		}

		config.Host = socketInfo.Address
		client, err = docker.NewVersionedClient(config.Host, config.APIVersion)
		if err != nil {
			return nil, err
		}

		if config.APIVersion != "" {
			client.SkipServerVersionCheck = true
		}

		log.Debug("dockerclient.New: new Docker client (default) [6]")

View on GitHub (pinned to 81940d17fa)

Solutions

  1. Treat like a missing Docker socket: verify the daemon socket exists and is discoverable (docker context ls / check /var/run/docker.sock).
  2. Set the Docker host explicitly in config so discovery isn't relied upon.
  3. Check GetUnixSocketAddr's candidate paths against your actual socket location and align (env var, symlink, or mount).
  4. Update the library/version if your Docker layout (rootless, Docker Desktop) isn't covered by the probe list.

Example fix

// before
client, err := dockerclient.New(&config.DockerClient{})
// after
cfg := &config.DockerClient{}
cfg.Host = "unix:///var/run/docker.sock" // skip discovery if using non-default socket
client, err := dockerclient.New(cfg)
Defensive patterns

Strategy: fallback

Validate before calling

if addr := os.Getenv("DOCKER_HOST"); addr != "" {
    cfg.Host = addr // bypass socket discovery entirely
}

Type guard

func hasSocketAddress(info *dockerclient.SocketInfo) bool {
    return info != nil && info.Address != ""
}

Try / catch

cli, err := dockerclient.New(cfg)
if err != nil && strings.Contains(err.Error(), "no unix socket found") {
    cfg.Host = "unix:///var/run/docker.sock" // explicit fallback host
    cli, err = dockerclient.New(cfg)
}
if err != nil {
    return err
}

Prevention

When it happens

Trigger: Constructing a client with New (via NewInteractiveApp, OnCommand, OnCopyCommand, OnImageIndexCreateCommand, OnPullCommand, OnPushCommand) when GetUnixSocketAddr returns a nil SocketInfo or one with an empty Address string.

Common situations: Custom/patched socket discovery returning an empty result; unusual Docker installations where a probe succeeds structurally but yields no address; race where the socket disappears between detection and use.

Related errors


AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31). Data as JSON: /api/errors/37f584ba755a0f3a. Report an issue: GitHub.