diff --git a/docker/models/containers.py b/docker/models/containers.py index d1f275f74f..66533491aa 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -8,7 +8,7 @@ ContainerError, DockerException, ImageNotFound, NotFound, create_unexpected_kwargs_error ) -from ..types import HostConfig +from ..types import (HostConfig, NetworkingConfig, EndpointConfig) from ..utils import version_gte from .images import Image from .resource import Collection, Model @@ -644,6 +644,8 @@ def run(self, image, command=None, stdout=True, stderr=False, - ``host`` Use the host network stack. Incompatible with ``network``. + network_alias (list): A list of hostnames that the container will + be available under. oom_kill_disable (bool): Whether to disable OOM killer. oom_score_adj (int): An integer value containing the score given to the container in order to tune OOM killer preferences. @@ -1066,7 +1068,15 @@ def _create_container_args(kwargs): network = kwargs.pop('network', None) if network: - create_kwargs['networking_config'] = {network: None} + network_alias = kwargs.pop('network_alias', None) + endpoint_config = None + if network_alias: + endpoint_config = EndpointConfig( + host_config_kwargs['version'], + aliases=network_alias) + + create_kwargs['networking_config'] = NetworkingConfig( + {network: endpoint_config}) host_config_kwargs['network_mode'] = network # All kwargs should have been consumed by this point, so raise diff --git a/tests/integration/models_containers_test.py b/tests/integration/models_containers_test.py index eac4c97909..a99e254130 100644 --- a/tests/integration/models_containers_test.py +++ b/tests/integration/models_containers_test.py @@ -94,6 +94,7 @@ def test_run_with_network(self): container = client.containers.run( 'alpine', 'echo hello world', network=net_name, + network_alias=['alias1', 'alias2'], detach=True ) self.tmp_containers.append(container.id) @@ -103,6 +104,10 @@ def test_run_with_network(self): assert 'NetworkSettings' in attrs assert 'Networks' in attrs['NetworkSettings'] assert list(attrs['NetworkSettings']['Networks'].keys()) == [net_name] + assert 'alias1' in attrs['NetworkSettings']['Networks'][ + net_name]['Aliases'] + assert 'alias2' in attrs['NetworkSettings']['Networks'][ + net_name]['Aliases'] def test_run_with_none_driver(self): client = docker.from_env(version=TEST_API_VERSION) diff --git a/tests/unit/models_containers_test.py b/tests/unit/models_containers_test.py index da5f0ab9d9..44492ed83c 100644 --- a/tests/unit/models_containers_test.py +++ b/tests/unit/models_containers_test.py @@ -73,6 +73,7 @@ def test_create_container_args(self): name='somename', network_disabled=False, network='foo', + network_alias=['bar', 'baz'], oom_kill_disable=True, oom_score_adj=5, pid_mode='host', @@ -185,7 +186,8 @@ def test_create_container_args(self): mac_address='abc123', name='somename', network_disabled=False, - networking_config={'foo': None}, + networking_config={'EndpointsConfig': {'foo': {'Aliases': + ['bar', 'baz']}}}, ports=[('1111', 'tcp'), ('2222', 'tcp')], stdin_open=True, stop_signal=9,