From 7a1fb3a8d271224c9846d32e3f5ac85dcee4de3e Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Thu, 16 Jan 2014 01:54:05 +0000 Subject: [PATCH] Fix ordering of port mapping --- fig/service.py | 10 ++++++++-- tests/service_test.py | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/fig/service.py b/fig/service.py index a2492e7f..5b7b7663 100644 --- a/fig/service.py +++ b/fig/service.py @@ -86,7 +86,7 @@ class Service(object): for port in options['ports']: port = str(port) if ':' in port: - internal_port, external_port = port.split(':', 1) + external_port, internal_port = port.split(':', 1) port_bindings[int(internal_port)] = int(external_port) else: port_bindings[int(port)] = None @@ -134,7 +134,13 @@ class Service(object): container_options['name'] = self.next_container_name(one_off) if 'ports' in container_options: - container_options['ports'] = [str(p).split(':')[0] for p in container_options['ports']] + ports = [] + for port in container_options['ports']: + port = str(port) + if ':' in port: + port = port.split(':')[-1] + ports.append(port) + container_options['ports'] = ports if 'volumes' in container_options: container_options['volumes'] = dict((v.split(':')[1], {}) for v in container_options['volumes']) diff --git a/tests/service_test.py b/tests/service_test.py index bc5c6ffe..d2078414 100644 --- a/tests/service_test.py +++ b/tests/service_test.py @@ -157,4 +157,9 @@ class ServiceTest(DockerClientTestCase): self.assertIn('8000/tcp', container['HostConfig']['PortBindings']) self.assertEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8000') + def test_start_container_creates_fixed_external_ports_when_it_is_different_to_internal_port(self): + service = self.create_service('web', ports=['8001:8000']) + container = service.start_container().inspect() + self.assertIn('8000/tcp', container['HostConfig']['PortBindings']) + self.assertEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8001')