Merge pull request #793 from docker/792-fix-ports-command

Support explicit protocol in Client.port
This commit is contained in:
Joffrey F 2015-09-28 14:35:47 -07:00
commit f51ae4b309
2 changed files with 31 additions and 3 deletions

View File

@ -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

View File

@ -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)
)