summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Steines <d.steines@gmail.com>2017-04-03 21:58:59 -0400
committerJoffrey F <f.joffrey@gmail.com>2017-08-17 13:38:40 -0700
commit6b59dc62715a1e387543de02ade80de84aa2171c (patch)
tree0574a6c1c960f001180544bfa6ee9d1aebd20e3a
parent2a6926b5aba00f83c8c1702f5dde3d5eaa855d29 (diff)
downloaddocker-py-6b59dc62715a1e387543de02ade80de84aa2171c.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.py10
-rw-r--r--tests/unit/models_containers_test.py30
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(