summaryrefslogtreecommitdiff
path: root/docker/utils/ports.py
diff options
context:
space:
mode:
Diffstat (limited to 'docker/utils/ports.py')
-rw-r--r--docker/utils/ports.py20
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)