mirror of https://github.com/docker/docker-py.git
Merge pull request #1467 from crierr/master
Allow port range like 8000-8010:80
This commit is contained in:
commit
f387ae46d7
|
@ -24,7 +24,7 @@ def build_port_bindings(ports):
|
||||||
return port_bindings
|
return port_bindings
|
||||||
|
|
||||||
|
|
||||||
def to_port_range(port):
|
def to_port_range(port, randomly_available_port=False):
|
||||||
if not port:
|
if not port:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -37,6 +37,9 @@ def to_port_range(port):
|
||||||
port, protocol = parts
|
port, protocol = parts
|
||||||
protocol = "/" + protocol
|
protocol = "/" + protocol
|
||||||
|
|
||||||
|
if randomly_available_port:
|
||||||
|
return ["%s%s" % (port, protocol)]
|
||||||
|
|
||||||
parts = str(port).split('-')
|
parts = str(port).split('-')
|
||||||
|
|
||||||
if len(parts) == 1:
|
if len(parts) == 1:
|
||||||
|
@ -69,9 +72,11 @@ def split_port(port):
|
||||||
external_port, internal_port = parts
|
external_port, internal_port = parts
|
||||||
|
|
||||||
internal_range = to_port_range(internal_port)
|
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)
|
_raise_invalid_port(port)
|
||||||
|
|
||||||
if len(internal_range) != len(external_range):
|
if len(internal_range) != len(external_range):
|
||||||
|
@ -81,7 +86,7 @@ def split_port(port):
|
||||||
|
|
||||||
external_ip, external_port, internal_port = parts
|
external_ip, external_port, internal_port = parts
|
||||||
internal_range = to_port_range(internal_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:
|
if not external_range:
|
||||||
external_range = [None] * len(internal_range)
|
external_range = [None] * len(internal_range)
|
||||||
|
|
||||||
|
|
|
@ -530,6 +530,11 @@ class PortsTest(unittest.TestCase):
|
||||||
self.assertEqual(internal_port, ["2000", "2001"])
|
self.assertEqual(internal_port, ["2000", "2001"])
|
||||||
self.assertEqual(external_port, ["1000", "1001"])
|
self.assertEqual(external_port, ["1000", "1001"])
|
||||||
|
|
||||||
|
def test_split_port_random_port_range_with_host_port(self):
|
||||||
|
internal_port, external_port = split_port("1000-1001:2000")
|
||||||
|
self.assertEqual(internal_port, ["2000"])
|
||||||
|
self.assertEqual(external_port, ["1000-1001"])
|
||||||
|
|
||||||
def test_split_port_no_host_port(self):
|
def test_split_port_no_host_port(self):
|
||||||
internal_port, external_port = split_port("2000")
|
internal_port, external_port = split_port("2000")
|
||||||
self.assertEqual(internal_port, ["2000"])
|
self.assertEqual(internal_port, ["2000"])
|
||||||
|
|
Loading…
Reference in New Issue