diff options
author | Joffrey F <joffrey@docker.com> | 2015-09-28 12:06:10 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2015-09-28 12:06:10 -0700 |
commit | d0ccc2e261c2abb3d87dd664011ac83015938534 (patch) | |
tree | 207710ba118940cfb4ed259988e2a1ece361e1da | |
parent | 5e331a55a8e8e10354693172dce1aa63f58ebe97 (diff) | |
download | docker-py-d0ccc2e261c2abb3d87dd664011ac83015938534.tar.gz |
Support explicit protocol in Client.port792-fix-ports-command
User can now specify a protocol in Client.port using the port/proto
syntax. Default port is now TCP instead of UDP (to match the
behavior of `docker port`) when no proto is specified.
Regression test
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/api/container.py | 9 | ||||
-rw-r--r-- | tests/integration_test.py | 25 |
2 files changed, 31 insertions, 3 deletions
diff --git a/docker/api/container.py b/docker/api/container.py index e7ddd73..f2d8a5b 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -196,7 +196,7 @@ class ContainerApiMixin(object): res = self._get(self._url("/containers/{0}/json", container)) self._raise_for_status(res) json_ = res.json() - s_port = str(private_port) + private_port = str(private_port) h_ports = None # Port settings is None when the container is running with @@ -205,9 +205,12 @@ class ContainerApiMixin(object): if port_settings is None: return None - h_ports = port_settings.get(s_port + '/udp') + if '/' in private_port: + return port_settings.get(private_port) + + h_ports = port_settings.get(private_port + '/tcp') if h_ports is None: - h_ports = port_settings.get(s_port + '/tcp') + h_ports = port_settings.get(private_port + '/udp') return h_ports diff --git a/tests/integration_test.py b/tests/integration_test.py index 763c863..7dd716f 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -17,6 +17,7 @@ import contextlib import json import io import os +import random import shutil import signal import socket @@ -1718,3 +1719,27 @@ class TestRegressions(BaseTestCase): if six.PY3: logs = logs.decode('utf-8') assert logs == '1000\n' + + def test_792_explicit_port_protocol(self): + + tcp_port, udp_port = random.sample(range(9999, 32000), 2) + ctnr = self.client.create_container( + BUSYBOX, 'true', ports=[2000, (2000, 'udp')], + host_config=self.client.create_host_config( + port_bindings={'2000/tcp': tcp_port, '2000/udp': udp_port} + ) + ) + self.tmp_containers.append(ctnr) + self.client.start(ctnr) + self.assertEqual( + self.client.port(ctnr, 2000)[0]['HostPort'], + six.text_type(tcp_port) + ) + self.assertEqual( + self.client.port(ctnr, '2000/tcp')[0]['HostPort'], + six.text_type(tcp_port) + ) + self.assertEqual( + self.client.port(ctnr, '2000/udp')[0]['HostPort'], + six.text_type(udp_port) + ) |