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
- Treat like a missing Docker socket: verify the daemon socket exists and is discoverable (docker context ls / check /var/run/docker.sock).
- Set the Docker host explicitly in config so discovery isn't relied upon.
- Check GetUnixSocketAddr's candidate paths against your actual socket location and align (env var, symlink, or mount).
- 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
- Set the Docker host explicitly via config or DOCKER_HOST instead of relying on discovery.
- Keep the library updated so socket discovery covers rootless/Docker Desktop paths.
- Symlink non-standard sockets to /var/run/docker.sock in constrained environments.
- Log GetUnixSocketAddr's discovered info once at startup to detect empty results early.
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
- docker socket not found
- insufficient socket permissions (can_read=%v can_write=%v)
- no docker info
- invalid context directory
- no service image
AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31).
Data as JSON: /api/errors/37f584ba755a0f3a.
Report an issue: GitHub.