mirror of https://github.com/docker/docker-py.git
Merge pull request #793 from docker/792-fix-ports-command
Support explicit protocol in Client.port
This commit is contained in:
commit
f51ae4b309
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue