add ports to containers

Signed-off-by: Karl Kuehn <kuehn.karl@gmail.com>
This commit is contained in:
Karl Kuehn 2018-01-30 14:28:37 -08:00 committed by Ulysses Souza
parent 02e660da12
commit 4890864d65
2 changed files with 29 additions and 0 deletions

View File

@ -62,6 +62,13 @@ class Container(Model):
return self.attrs['State']['Status']
return self.attrs['State']
@property
def ports(self):
"""
The ports that the container exposes as a dictionary.
"""
return self.attrs.get('NetworkSettings', {}).get('Ports', {})
def attach(self, **kwargs):
"""
Attach to this container.

View File

@ -346,6 +346,28 @@ class ContainerTest(BaseIntegrationTest):
'memory_stats', 'blkio_stats']:
assert key in stats
def test_ports(self):
client = docker.from_env(version=TEST_API_VERSION)
target_ports = {'2222/tcp': None}
container = client.containers.run(
"alpine", "sleep 100", detach=True,
ports=target_ports
)
self.tmp_containers.append(container.id)
container.reload() # required to get auto-assigned ports
actual_ports = container.ports
assert sorted(target_ports.keys()) == sorted(actual_ports.keys())
for target_client, target_host in target_ports.items():
for actual_port in actual_ports[target_client]:
actual_keys = sorted(actual_port.keys())
assert sorted(['HostIp', 'HostPort']) == actual_keys
if target_host is None:
int(actual_port['HostPort'])
elif isinstance(target_host, (list, tuple)):
raise NotImplementedError()
else:
assert actual_port['HostPort'] == target_host.split('/', 1)
def test_stop(self):
client = docker.from_env(version=TEST_API_VERSION)
container = client.containers.run("alpine", "top", detach=True)