Browse code

Merge pull request #3234 from creack/default_unix_path

Default unix path

Andy Rothfusz authored on 2013/12/18 09:24:01
Showing 4 changed files
... ...
@@ -12,7 +12,7 @@ To list available commands, either run ``docker`` with no parameters or execute
12 12
 
13 13
   $ sudo docker
14 14
     Usage: docker [OPTIONS] COMMAND [arg...]
15
-      -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use
15
+      -H=[unix:///var/run/docker.sock]: tcp://[host[:port]] to bind/connect to or unix://[/path/to/socket] to use. When host=[0.0.0.0], port=[4243] or path=[/var/run/docker.sock] is omitted, default values are used.
16 16
 
17 17
     A self-sufficient runtime for linux containers.
18 18
 
... ...
@@ -27,7 +27,7 @@ To list available commands, either run ``docker`` with no parameters or execute
27 27
 
28 28
     Usage of docker:
29 29
       -D=false: Enable debug mode
30
-      -H=[unix:///var/run/docker.sock]: Multiple tcp://host:port or unix://path/to/socket to bind in daemon mode, single connection otherwise
30
+      -H=[unix:///var/run/docker.sock]: tcp://[host[:port]] to bind or unix://[/path/to/socket] to use. When host=[0.0.0.0], port=[4243] or path=[/var/run/docker.sock] is omitted, default values are used.
31 31
       -api-enable-cors=false: Enable CORS headers in the remote API
32 32
       -b="": Attach containers to a pre-existing network bridge; use 'none' to disable container networking
33 33
       -bip="": Use the provided CIDR notation address for the dynamically created bridge (docker0); Mutually exclusive of -b
... ...
@@ -129,7 +129,7 @@ func ValidateEnv(val string) (string, error) {
129 129
 }
130 130
 
131 131
 func ValidateHost(val string) (string, error) {
132
-	host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, val)
132
+	host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, DEFAULTUNIXSOCKET, val)
133 133
 	if err != nil {
134 134
 		return val, err
135 135
 	}
... ...
@@ -776,11 +776,21 @@ func GetNameserversAsCIDR(resolvConf []byte) []string {
776 776
 	return nameservers
777 777
 }
778 778
 
779
-func ParseHost(host string, port int, addr string) (string, error) {
780
-	var proto string
779
+// FIXME: Change this not to receive default value as parameter
780
+func ParseHost(defaultHost string, defaultPort int, defaultUnix, addr string) (string, error) {
781
+	var (
782
+		proto string
783
+		host  string
784
+		port  int
785
+	)
786
+
781 787
 	switch {
782 788
 	case strings.HasPrefix(addr, "unix://"):
783
-		return addr, nil
789
+		proto = "unix"
790
+		addr = strings.TrimPrefix(addr, "unix://")
791
+		if addr == "" {
792
+			addr = defaultUnix
793
+		}
784 794
 	case strings.HasPrefix(addr, "tcp://"):
785 795
 		proto = "tcp"
786 796
 		addr = strings.TrimPrefix(addr, "tcp://")
... ...
@@ -791,19 +801,29 @@ func ParseHost(host string, port int, addr string) (string, error) {
791 791
 		proto = "tcp"
792 792
 	}
793 793
 
794
-	if strings.Contains(addr, ":") {
794
+	if proto != "unix" && strings.Contains(addr, ":") {
795 795
 		hostParts := strings.Split(addr, ":")
796 796
 		if len(hostParts) != 2 {
797 797
 			return "", fmt.Errorf("Invalid bind address format: %s", addr)
798 798
 		}
799 799
 		if hostParts[0] != "" {
800 800
 			host = hostParts[0]
801
+		} else {
802
+			host = defaultHost
801 803
 		}
802
-		if p, err := strconv.Atoi(hostParts[1]); err == nil {
804
+
805
+		if p, err := strconv.Atoi(hostParts[1]); err == nil && p != 0 {
803 806
 			port = p
807
+		} else {
808
+			port = defaultPort
804 809
 		}
810
+
805 811
 	} else {
806 812
 		host = addr
813
+		port = defaultPort
814
+	}
815
+	if proto == "unix" {
816
+		return fmt.Sprintf("%s://%s", proto, host), nil
807 817
 	}
808 818
 	return fmt.Sprintf("%s://%s:%d", proto, host, port), nil
809 819
 }
... ...
@@ -299,22 +299,33 @@ func assertRAMInBytes(t *testing.T, size string, expectError bool, expectedBytes
299 299
 }
300 300
 
301 301
 func TestParseHost(t *testing.T) {
302
-	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" {
302
+	var (
303
+		defaultHttpHost = "127.0.0.1"
304
+		defaultHttpPort = 4243
305
+		defaultUnix     = "/var/run/docker.sock"
306
+	)
307
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" {
303 308
 		t.Errorf("0.0.0.0 -> expected tcp://0.0.0.0:4243, got %s", addr)
304 309
 	}
305
-	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" {
310
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" {
306 311
 		t.Errorf("0.0.0.1:5555 -> expected tcp://0.0.0.1:5555, got %s", addr)
307 312
 	}
308
-	if addr, err := ParseHost("127.0.0.1", 4243, ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" {
313
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" {
309 314
 		t.Errorf(":6666 -> expected tcp://127.0.0.1:6666, got %s", addr)
310 315
 	}
311
-	if addr, err := ParseHost("127.0.0.1", 4243, "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" {
316
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" {
312 317
 		t.Errorf("tcp://:7777 -> expected tcp://127.0.0.1:7777, got %s", addr)
313 318
 	}
314
-	if addr, err := ParseHost("127.0.0.1", 4243, "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" {
319
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" {
320
+		t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr)
321
+	}
322
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "unix://"); err != nil || addr != "unix:///var/run/docker.sock" {
315 323
 		t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr)
316 324
 	}
317
-	if addr, err := ParseHost("127.0.0.1", 4243, "udp://127.0.0.1"); err == nil {
325
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "udp://127.0.0.1"); err == nil {
326
+		t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr)
327
+	}
328
+	if addr, err := ParseHost(defaultHttpHost, defaultHttpPort, defaultUnix, "udp://127.0.0.1:4243"); err == nil {
318 329
 		t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr)
319 330
 	}
320 331
 }