diff --git a/parsers/parsers.go b/parsers/parsers.go index 32d8773..e6c8774 100644 --- a/parsers/parsers.go +++ b/parsers/parsers.go @@ -2,6 +2,7 @@ package parsers import ( "fmt" + "net/url" "runtime" "strconv" "strings" @@ -52,7 +53,11 @@ func ParseTCPAddr(addr string, defaultAddr string) (string, error) { return "", fmt.Errorf("Invalid proto, expected tcp: %s", addr) } - hostParts := strings.Split(addr, ":") + u, err := url.Parse("tcp://" + addr) + if err != nil { + return "", err + } + hostParts := strings.Split(u.Host, ":") if len(hostParts) != 2 { return "", fmt.Errorf("Invalid bind address format: %s", addr) } @@ -65,7 +70,7 @@ func ParseTCPAddr(addr string, defaultAddr string) (string, error) { if err != nil && p == 0 { return "", fmt.Errorf("Invalid bind address format: %s", addr) } - return fmt.Sprintf("tcp://%s:%d", host, p), nil + return fmt.Sprintf("tcp://%s:%d%s", host, p, u.Path), nil } // Get a repos name and returns the right reposName + tag|digest diff --git a/parsers/parsers_test.go b/parsers/parsers_test.go index e62aad7..a64e6b9 100644 --- a/parsers/parsers_test.go +++ b/parsers/parsers_test.go @@ -14,14 +14,18 @@ func TestParseHost(t *testing.T) { "0.0.0.0": "Invalid bind address format: 0.0.0.0", "tcp://": "Invalid proto, expected tcp: ", "tcp:a.b.c.d": "Invalid bind address format: tcp:a.b.c.d", + "tcp:a.b.c.d/path": "Invalid bind address format: tcp:a.b.c.d/path", "udp://127.0.0.1": "Invalid bind address format: udp://127.0.0.1", "udp://127.0.0.1:2375": "Invalid bind address format: udp://127.0.0.1:2375", } valids := map[string]string{ - "0.0.0.1:5555": "tcp://0.0.0.1:5555", - ":6666": "tcp://127.0.0.1:6666", - "tcp://:7777": "tcp://127.0.0.1:7777", - "": "unix:///var/run/docker.sock", + "0.0.0.1:5555": "tcp://0.0.0.1:5555", + "0.0.0.1:5555/path": "tcp://0.0.0.1:5555/path", + ":6666": "tcp://127.0.0.1:6666", + ":6666/path": "tcp://127.0.0.1:6666/path", + "tcp://:7777": "tcp://127.0.0.1:7777", + "tcp://:7777/path": "tcp://127.0.0.1:7777/path", + "": "unix:///var/run/docker.sock", "unix:///run/docker.sock": "unix:///run/docker.sock", "unix://": "unix:///var/run/docker.sock", "fd://": "fd://",