summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Doan <ben@bendoan.me>2018-03-15 18:21:52 -0500
committerJoffrey F <f.joffrey@gmail.com>2018-04-25 17:18:26 -0700
commitb3ae4d6ebd0674b9dff0abfef001e8fe47ccfd22 (patch)
tree3464e82c70645ba01645fa8228a782b91a10b894
parent827bd98d074d3a60882fc21886912d5b84d17f3b (diff)
downloaddocker-py-b3ae4d6ebd0674b9dff0abfef001e8fe47ccfd22.tar.gz
avoid race condition in containers.list
Signed-off-by: Ben Doan <ben@bendoan.me>
-rw-r--r--docker/models/containers.py11
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)