diff options
| author | Ben Doan <ben@bendoan.me> | 2018-03-15 18:21:52 -0500 |
|---|---|---|
| committer | Joffrey F <f.joffrey@gmail.com> | 2018-04-25 17:18:26 -0700 |
| commit | b3ae4d6ebd0674b9dff0abfef001e8fe47ccfd22 (patch) | |
| tree | 3464e82c70645ba01645fa8228a782b91a10b894 | |
| parent | 827bd98d074d3a60882fc21886912d5b84d17f3b (diff) | |
| download | docker-py-b3ae4d6ebd0674b9dff0abfef001e8fe47ccfd22.tar.gz | |
avoid race condition in containers.list
Signed-off-by: Ben Doan <ben@bendoan.me>
| -rw-r--r-- | docker/models/containers.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/docker/models/containers.py b/docker/models/containers.py index 1e06ed6..789fa93 100644 --- a/docker/models/containers.py +++ b/docker/models/containers.py @@ -6,7 +6,7 @@ from ..api import APIClient from ..constants import DEFAULT_DATA_CHUNK_SIZE from ..errors import ( ContainerError, DockerException, ImageNotFound, - create_unexpected_kwargs_error + NotFound, create_unexpected_kwargs_error ) from ..types import HostConfig from ..utils import version_gte @@ -896,7 +896,14 @@ class ContainerCollection(Collection): if sparse: return [self.prepare_model(r) for r in resp] else: - return [self.get(r['Id']) for r in resp] + containers = [] + for r in resp: + try: + containers.append(self.get(r['Id'])) + # a container may have been removed while iterating + except NotFound: + pass + return containers def prune(self, filters=None): return self.client.api.prune_containers(filters=filters) |
