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 = []