diff options
| author | David Steines <d.steines@gmail.com> | 2017-04-03 21:58:59 -0400 |
|---|---|---|
| committer | Joffrey F <joffrey@docker.com> | 2017-08-17 12:40:37 -0700 |
| commit | 1fb58e9d5deedb0e0c694db76f7de9c7aa140fb2 (patch) | |
| tree | 0574a6c1c960f001180544bfa6ee9d1aebd20e3a | |
| parent | 235f790c085ce846553345b31f46f3b0f884a317 (diff) | |
| download | docker-py-1fb58e9d5deedb0e0c694db76f7de9c7aa140fb2.tar.gz | |
Allow detach and remove for api version >= 1.25 and use auto_remove when both are set. Continue raising an exception for api versions <1.25.
Signed-off-by: David Steines <d.steines@gmail.com>
| -rw-r--r-- | docker/models/containers.py | 10 | ||||
| -rw-r--r-- | tests/unit/models_containers_test.py | 30 |
2 files changed, 38 insertions, 2 deletions
diff --git a/docker/models/containers.py b/docker/models/containers.py index a3598f2..d9db79d 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -4,6 +4,7 @@ from ..api import APIClient from ..errors import (ContainerError, ImageNotFound, create_unexpected_kwargs_error) from ..types import HostConfig +from ..utils import compare_version from .images import Image from .resource import Collection, Model @@ -690,8 +691,12 @@ class ContainerCollection(Collection): image = image.id detach = kwargs.pop("detach", False) if detach and remove: - raise RuntimeError("The options 'detach' and 'remove' cannot be " - "used together.") + if compare_version("1.24", + self.client.api._version) > 0: + kwargs["auto_remove"] = True + else: + raise RuntimeError("The options 'detach' and 'remove' cannot " + "be used together in api versions < 1.25.") if kwargs.get('network') and kwargs.get('network_mode'): raise RuntimeError( @@ -849,6 +854,7 @@ RUN_CREATE_KWARGS = [ # kwargs to copy straight from run to host_config RUN_HOST_CONFIG_KWARGS = [ + 'auto_remove', 'blkio_weight_device', 'blkio_weight', 'cap_add', diff --git a/tests/unit/models_containers_test.py b/tests/unit/models_containers_test.py index 70c8648..5eaa45a 100644 --- a/tests/unit/models_containers_test.py +++ b/tests/unit/models_containers_test.py @@ -273,9 +273,39 @@ class ContainerCollectionTest(unittest.TestCase): client.api.remove_container.assert_called_with(FAKE_CONTAINER_ID) client = make_fake_client() + client.api._version = '1.24' with self.assertRaises(RuntimeError): client.containers.run("alpine", detach=True, remove=True) + client = make_fake_client() + client.api._version = '1.23' + with self.assertRaises(RuntimeError): + client.containers.run("alpine", detach=True, remove=True) + + client = make_fake_client() + client.api._version = '1.25' + client.containers.run("alpine", detach=True, remove=True) + client.api.remove_container.assert_not_called() + client.api.create_container.assert_called_with( + command=None, + image='alpine', + detach=True, + host_config={'AutoRemove': True, + 'NetworkMode': 'default'} + ) + + client = make_fake_client() + client.api._version = '1.26' + client.containers.run("alpine", detach=True, remove=True) + client.api.remove_container.assert_not_called() + client.api.create_container.assert_called_with( + command=None, + image='alpine', + detach=True, + host_config={'AutoRemove': True, + 'NetworkMode': 'default'} + ) + def test_create(self): client = make_fake_client() container = client.containers.create( |
