summaryrefslogtreecommitdiff
blob: 6eda63459dd96bc7400da14fbac14b9cf30404f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
diff --git a/docker/utils/utils.py b/docker/utils/utils.py
index 447760b..3996d08 100644
--- a/docker/utils/utils.py
+++ b/docker/utils/utils.py
@@ -17,10 +17,9 @@ from ..constants import DEFAULT_NPIPE
 from ..constants import BYTE_UNITS
 
 if six.PY2:
-    from urllib import splitnport
     from urlparse import urlparse
 else:
-    from urllib.parse import splitnport, urlparse
+    from urllib.parse import urlparse
 
 
 def create_ipam_pool(*args, **kwargs):
@@ -278,7 +277,7 @@ def parse_host(addr, is_win32=False, tls=False):
             if proto != 'ssh':
                 raise errors.DockerException(
                     'Invalid bind address format: port is required:'
-                    ' {}'.format(addr)
+                    ' {}://{}'.format(proto, addr)
                 )
             port = 22
 
@@ -295,6 +294,33 @@ def parse_host(addr, is_win32=False, tls=False):
         return "{}://{}".format(proto, path).rstrip('/')
     return '{0}://{1}:{2}{3}'.format(proto, host, port, path).rstrip('/')
 
+def splitnport(netloc):
+    import re
+
+    host_port_re1 = re.compile(r"^(.*):([0-9]*)$", re.DOTALL)
+    host_port_re2 = re.compile(r"^(.*)$", re.DOTALL)
+
+    host = None
+    port = None
+
+    match = host_port_re1.match(netloc)
+
+    if match:
+        host, port = match.groups()
+    else:
+        match = host_port_re2.match(netloc)
+        if match:
+            host = match.groups()[0]
+            port = None
+
+    if host == '':
+        host = None
+    if port == '':
+        port = None
+
+    port = int(port) if port else 0
+
+    return host, port or None
 
 def parse_devices(devices):
     device_list = []