diff --git a/opts/hosts.go b/opts/hosts.go index 552ab6b4a552..bc6aff6e35e8 100644 --- a/opts/hosts.go +++ b/opts/hosts.go @@ -74,7 +74,12 @@ func parseDockerDaemonHost(addr string) (string, error) { proto, host, hasProto := strings.Cut(addr, "://") if !hasProto && proto != "" { host = proto - proto = "tcp" + // if the addr string starts with "/", "./", or "../", the user very likely meant "path to a socket" + if strings.HasPrefix(host, "/") || strings.HasPrefix(host, "./") || strings.HasPrefix(host, "../") { + proto = "unix" + } else { + proto = "tcp" + } } switch proto { diff --git a/opts/hosts_test.go b/opts/hosts_test.go index f1096c4f647f..bab2b1ca9f87 100644 --- a/opts/hosts_test.go +++ b/opts/hosts_test.go @@ -37,6 +37,9 @@ func TestParseHost(t *testing.T) { "unix://path/to/socket": "unix://path/to/socket", "npipe://": "npipe://" + defaultNamedPipe, "npipe:////./pipe/foo": "npipe:////./pipe/foo", + "/some.sock": "unix:///some.sock", + "./single/dot": "unix://./single/dot", + "../double/dot": "unix://../double/dot", } for _, value := range invalid {