diff options
Diffstat (limited to 'docker/utils/ports.py')
| -rw-r--r-- | docker/utils/ports.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/docker/utils/ports.py b/docker/utils/ports.py index 326ef94..3708958 100644 --- a/docker/utils/ports.py +++ b/docker/utils/ports.py @@ -24,7 +24,7 @@ def build_port_bindings(ports): return port_bindings -def to_port_range(port): +def to_port_range(port, randomly_available_port=False): if not port: return None @@ -37,6 +37,9 @@ def to_port_range(port): port, protocol = parts protocol = "/" + protocol + if randomly_available_port: + return ["%s%s" % (port, protocol)] + parts = str(port).split('-') if len(parts) == 1: @@ -64,14 +67,18 @@ def split_port(port): if len(parts) == 1: internal_port, = parts + if not internal_port: + _raise_invalid_port(port) return to_port_range(internal_port), None if len(parts) == 2: external_port, internal_port = parts internal_range = to_port_range(internal_port) - external_range = to_port_range(external_port) + if internal_range is None: + _raise_invalid_port(port) - if internal_range is None or external_range is None: + external_range = to_port_range(external_port, len(internal_range) == 1) + if external_range is None: _raise_invalid_port(port) if len(internal_range) != len(external_range): @@ -80,8 +87,13 @@ def split_port(port): return internal_range, external_range external_ip, external_port, internal_port = parts + + if not internal_port: + _raise_invalid_port(port) + internal_range = to_port_range(internal_port) - external_range = to_port_range(external_port) + external_range = to_port_range(external_port, len(internal_range) == 1) + if not external_range: external_range = [None] * len(internal_range) |
