mirror of https://github.com/docker/docker-py.git
Added support for starting container from a checkpoint
This commit is contained in:
parent
aca129dd69
commit
d285e6103d
|
|
@ -1088,7 +1088,8 @@ class ContainerApiMixin:
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
@utils.check_resource('container')
|
@utils.check_resource('container')
|
||||||
def start(self, container, *args, **kwargs):
|
def start(self, container, checkpoint=None, checkpoint_dir=None,
|
||||||
|
*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Start a container. Similar to the ``docker start`` command, but
|
Start a container. Similar to the ``docker start`` command, but
|
||||||
doesn't support attach options.
|
doesn't support attach options.
|
||||||
|
|
@ -1101,12 +1102,17 @@ class ContainerApiMixin:
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
container (str): The container to start
|
container (str): The container to start
|
||||||
|
checkpoint (str): (Experimental) The checkpoint ID from which
|
||||||
|
to start
|
||||||
|
checkpoint_dir (str): (Experimental) Custom directory in which to
|
||||||
|
search for checkpoints
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
:py:class:`docker.errors.APIError`
|
:py:class:`docker.errors.APIError`
|
||||||
If the server returns an error.
|
If the server returns an error.
|
||||||
:py:class:`docker.errors.DeprecatedMethod`
|
:py:class:`docker.errors.DeprecatedMethod`
|
||||||
If any argument besides ``container`` are provided.
|
If any argument besides ``container``, ``checkpoint``
|
||||||
|
or ``checkpoint_dir`` are provided.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
@ -1115,6 +1121,12 @@ class ContainerApiMixin:
|
||||||
... command='/bin/sleep 30')
|
... command='/bin/sleep 30')
|
||||||
>>> client.api.start(container=container.get('Id'))
|
>>> client.api.start(container=container.get('Id'))
|
||||||
"""
|
"""
|
||||||
|
params = {}
|
||||||
|
if checkpoint:
|
||||||
|
params["checkpoint"] = checkpoint
|
||||||
|
if checkpoint_dir:
|
||||||
|
params['checkpoint-dir'] = checkpoint_dir
|
||||||
|
|
||||||
if args or kwargs:
|
if args or kwargs:
|
||||||
raise errors.DeprecatedMethod(
|
raise errors.DeprecatedMethod(
|
||||||
'Providing configuration in the start() method is no longer '
|
'Providing configuration in the start() method is no longer '
|
||||||
|
|
@ -1122,7 +1134,7 @@ class ContainerApiMixin:
|
||||||
'instead.'
|
'instead.'
|
||||||
)
|
)
|
||||||
url = self._url("/containers/{0}/start", container)
|
url = self._url("/containers/{0}/start", container)
|
||||||
res = self._post(url)
|
res = self._post(url, params=params)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
@utils.check_resource('container')
|
@utils.check_resource('container')
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,19 @@ class StartContainerTest(BaseAPIClientTest):
|
||||||
assert 'data' not in args[1]
|
assert 'data' not in args[1]
|
||||||
assert args[1]['timeout'] == DEFAULT_TIMEOUT_SECONDS
|
assert args[1]['timeout'] == DEFAULT_TIMEOUT_SECONDS
|
||||||
|
|
||||||
|
def test_start_container_from_checkpoint(self):
|
||||||
|
self.client.start(fake_api.FAKE_CONTAINER_ID,
|
||||||
|
checkpoint="my-checkpoint",
|
||||||
|
checkpoint_dir="/path/to/checkpoint/dir")
|
||||||
|
|
||||||
|
args = fake_request.call_args
|
||||||
|
assert args[0][1] == (url_prefix + 'containers/' +
|
||||||
|
fake_api.FAKE_CONTAINER_ID + '/start')
|
||||||
|
assert 'data' not in args[1]
|
||||||
|
assert args[1]["params"]["checkpoint"] == "my-checkpoint"
|
||||||
|
assert args[1]["params"]["checkpoint-dir"] == "/path/to/checkpoint/dir"
|
||||||
|
assert args[1]['timeout'] == DEFAULT_TIMEOUT_SECONDS
|
||||||
|
|
||||||
def test_start_container_none(self):
|
def test_start_container_none(self):
|
||||||
with pytest.raises(ValueError) as excinfo:
|
with pytest.raises(ValueError) as excinfo:
|
||||||
self.client.start(container=None)
|
self.client.start(container=None)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue