mirror of https://github.com/docker/docker-py.git
Merge branch 'main' into fix_dockerfile
Signed-off-by: Milas Bowman <milas.bowman@docker.com>
This commit is contained in:
commit
1f55b9691e
|
|
@ -1,6 +1,6 @@
|
||||||
# Docker SDK for Python
|
# Docker SDK for Python
|
||||||
|
|
||||||
[](https://github.com/docker/docker-py/actions/workflows/ci.yml/)
|
[](https://github.com/docker/docker-py/actions/workflows/ci.yml)
|
||||||
|
|
||||||
A Python library for the Docker Engine API. It lets you do anything the `docker` command does, but from within Python apps – run containers, manage containers, manage Swarms, etc.
|
A Python library for the Docker Engine API. It lets you do anything the `docker` command does, but from within Python apps – run containers, manage containers, manage Swarms, etc.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ class ContainerApiMixin:
|
||||||
|
|
||||||
@utils.check_resource('container')
|
@utils.check_resource('container')
|
||||||
def commit(self, container, repository=None, tag=None, message=None,
|
def commit(self, container, repository=None, tag=None, message=None,
|
||||||
author=None, changes=None, conf=None):
|
author=None, pause=True, changes=None, conf=None):
|
||||||
"""
|
"""
|
||||||
Commit a container to an image. Similar to the ``docker commit``
|
Commit a container to an image. Similar to the ``docker commit``
|
||||||
command.
|
command.
|
||||||
|
|
@ -123,6 +123,7 @@ class ContainerApiMixin:
|
||||||
tag (str): The tag to push
|
tag (str): The tag to push
|
||||||
message (str): A commit message
|
message (str): A commit message
|
||||||
author (str): The name of the author
|
author (str): The name of the author
|
||||||
|
pause (bool): Whether to pause the container before committing
|
||||||
changes (str): Dockerfile instructions to apply while committing
|
changes (str): Dockerfile instructions to apply while committing
|
||||||
conf (dict): The configuration for the container. See the
|
conf (dict): The configuration for the container. See the
|
||||||
`Engine API documentation
|
`Engine API documentation
|
||||||
|
|
@ -139,6 +140,7 @@ class ContainerApiMixin:
|
||||||
'tag': tag,
|
'tag': tag,
|
||||||
'comment': message,
|
'comment': message,
|
||||||
'author': author,
|
'author': author,
|
||||||
|
'pause': pause,
|
||||||
'changes': changes
|
'changes': changes
|
||||||
}
|
}
|
||||||
u = self._url("/commit")
|
u = self._url("/commit")
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ def create_api_error_from_http_exception(e):
|
||||||
try:
|
try:
|
||||||
explanation = response.json()['message']
|
explanation = response.json()['message']
|
||||||
except ValueError:
|
except ValueError:
|
||||||
explanation = (response.content or '').strip()
|
explanation = (response.text or '').strip()
|
||||||
cls = APIError
|
cls = APIError
|
||||||
if response.status_code == 404:
|
if response.status_code == 404:
|
||||||
explanation_msg = (explanation or '').lower()
|
explanation_msg = (explanation or '').lower()
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@ class Container(Model):
|
||||||
tag (str): The tag to push
|
tag (str): The tag to push
|
||||||
message (str): A commit message
|
message (str): A commit message
|
||||||
author (str): The name of the author
|
author (str): The name of the author
|
||||||
|
pause (bool): Whether to pause the container before committing
|
||||||
changes (str): Dockerfile instructions to apply while committing
|
changes (str): Dockerfile instructions to apply while committing
|
||||||
conf (dict): The configuration for the container. See the
|
conf (dict): The configuration for the container. See the
|
||||||
`Engine API documentation
|
`Engine API documentation
|
||||||
|
|
|
||||||
|
|
@ -122,8 +122,8 @@ class CreateContainerTest(BaseAPIIntegrationTest):
|
||||||
self.client.wait(id)
|
self.client.wait(id)
|
||||||
with pytest.raises(docker.errors.APIError) as exc:
|
with pytest.raises(docker.errors.APIError) as exc:
|
||||||
self.client.remove_container(id)
|
self.client.remove_container(id)
|
||||||
err = exc.value.explanation
|
err = exc.value.explanation.lower()
|
||||||
assert 'You cannot remove ' in err
|
assert 'stop the container before' in err
|
||||||
self.client.remove_container(id, force=True)
|
self.client.remove_container(id, force=True)
|
||||||
|
|
||||||
def test_create_container_with_volumes_from(self):
|
def test_create_container_with_volumes_from(self):
|
||||||
|
|
@ -1392,7 +1392,7 @@ class GetContainerStatsTest(BaseAPIIntegrationTest):
|
||||||
response = self.client.stats(container, stream=0)
|
response = self.client.stats(container, stream=0)
|
||||||
self.client.kill(container)
|
self.client.kill(container)
|
||||||
|
|
||||||
assert type(response) == dict
|
assert isinstance(response, dict)
|
||||||
for key in ['read', 'networks', 'precpu_stats', 'cpu_stats',
|
for key in ['read', 'networks', 'precpu_stats', 'cpu_stats',
|
||||||
'memory_stats', 'blkio_stats']:
|
'memory_stats', 'blkio_stats']:
|
||||||
assert key in response
|
assert key in response
|
||||||
|
|
@ -1405,7 +1405,7 @@ class GetContainerStatsTest(BaseAPIIntegrationTest):
|
||||||
self.client.start(container)
|
self.client.start(container)
|
||||||
stream = self.client.stats(container)
|
stream = self.client.stats(container)
|
||||||
for chunk in stream:
|
for chunk in stream:
|
||||||
assert type(chunk) == dict
|
assert isinstance(chunk, dict)
|
||||||
for key in ['read', 'network', 'precpu_stats', 'cpu_stats',
|
for key in ['read', 'network', 'precpu_stats', 'cpu_stats',
|
||||||
'memory_stats', 'blkio_stats']:
|
'memory_stats', 'blkio_stats']:
|
||||||
assert key in chunk
|
assert key in chunk
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class ListImagesTest(BaseAPIIntegrationTest):
|
||||||
|
|
||||||
def test_images_quiet(self):
|
def test_images_quiet(self):
|
||||||
res1 = self.client.images(quiet=True)
|
res1 = self.client.images(quiet=True)
|
||||||
assert type(res1[0]) == str
|
assert isinstance(res1[0], str)
|
||||||
|
|
||||||
|
|
||||||
class PullImageTest(BaseAPIIntegrationTest):
|
class PullImageTest(BaseAPIIntegrationTest):
|
||||||
|
|
@ -43,7 +43,7 @@ class PullImageTest(BaseAPIIntegrationTest):
|
||||||
pass
|
pass
|
||||||
res = self.client.pull('hello-world')
|
res = self.client.pull('hello-world')
|
||||||
self.tmp_imgs.append('hello-world')
|
self.tmp_imgs.append('hello-world')
|
||||||
assert type(res) == str
|
assert isinstance(res, str)
|
||||||
assert len(self.client.images('hello-world')) >= 1
|
assert len(self.client.images('hello-world')) >= 1
|
||||||
img_info = self.client.inspect_image('hello-world')
|
img_info = self.client.inspect_image('hello-world')
|
||||||
assert 'Id' in img_info
|
assert 'Id' in img_info
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class ErrorsTest(BaseAPIIntegrationTest):
|
||||||
self.client.start(container['Id'])
|
self.client.start(container['Id'])
|
||||||
with pytest.raises(APIError) as cm:
|
with pytest.raises(APIError) as cm:
|
||||||
self.client.remove_container(container['Id'])
|
self.client.remove_container(container['Id'])
|
||||||
explanation = cm.value.explanation
|
explanation = cm.value.explanation.lower()
|
||||||
assert 'You cannot remove a running container' in explanation
|
assert 'stop the container before' in explanation
|
||||||
assert '{"message":' not in explanation
|
assert '{"message":' not in explanation
|
||||||
self.client.remove_container(container['Id'], force=True)
|
self.client.remove_container(container['Id'], force=True)
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,7 @@ class ImageTest(BaseAPIClientTest):
|
||||||
'tag': None,
|
'tag': None,
|
||||||
'container': fake_api.FAKE_CONTAINER_ID,
|
'container': fake_api.FAKE_CONTAINER_ID,
|
||||||
'author': None,
|
'author': None,
|
||||||
|
'pause': True,
|
||||||
'changes': None
|
'changes': None
|
||||||
},
|
},
|
||||||
timeout=DEFAULT_TIMEOUT_SECONDS
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue