From df9f66d437fb2b4e21595f312f8f63e6cc63b3d7 Mon Sep 17 00:00:00 2001 From: Aanand Prasad Date: Wed, 22 Jan 2014 17:01:10 +0000 Subject: [PATCH] Allow ports to be specified in '1234/tcp' format --- fig/service.py | 7 +++++-- tests/service_test.py | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/fig/service.py b/fig/service.py index adaf940ec..aaaa97ab6 100644 --- a/fig/service.py +++ b/fig/service.py @@ -172,9 +172,10 @@ class Service(object): port = str(port) if ':' in port: external_port, internal_port = port.split(':', 1) - port_bindings[int(internal_port)] = int(external_port) else: - port_bindings[int(port)] = None + external_port, internal_port = (None, port) + + port_bindings[internal_port] = external_port volume_bindings = {} @@ -225,6 +226,8 @@ class Service(object): port = str(port) if ':' in port: port = port.split(':')[-1] + if '/' in port: + port = tuple(port.split('/')) ports.append(port) container_options['ports'] = ports diff --git a/tests/service_test.py b/tests/service_test.py index dcbc4627d..ca9a0021c 100644 --- a/tests/service_test.py +++ b/tests/service_test.py @@ -187,6 +187,11 @@ class ServiceTest(DockerClientTestCase): self.assertEqual(container['HostConfig']['PortBindings'].keys(), ['8000/tcp']) self.assertNotEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8000') + def test_start_container_creates_port_with_explicit_protocol(self): + service = self.create_service('web', ports=['8000/udp']) + container = service.start_container().inspect() + self.assertEqual(container['HostConfig']['PortBindings'].keys(), ['8000/udp']) + def test_start_container_creates_fixed_external_ports(self): service = self.create_service('web', ports=['8000:8000']) container = service.start_container().inspect()