diff --git a/docker/models/images.py b/docker/models/images.py index e3082ac8..7e999b0c 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -166,19 +166,20 @@ class ImageCollection(Collection): if isinstance(resp, six.string_types): return self.get(resp) last_event = None + image_id = None for chunk in json_stream(resp): if 'error' in chunk: raise BuildError(chunk['error']) if 'stream' in chunk: match = re.search( - r'(Successfully built |sha256:)([0-9a-f]+)', + r'(^Successfully built |sha256:)([0-9a-f]+)$', chunk['stream'] ) if match: image_id = match.group(2) - return self.get(image_id) last_event = chunk - + if image_id: + return self.get(image_id) raise BuildError(last_event or 'Unknown') def get(self, name): diff --git a/tests/integration/models_images_test.py b/tests/integration/models_images_test.py index 881df0a1..8f812d93 100644 --- a/tests/integration/models_images_test.py +++ b/tests/integration/models_images_test.py @@ -39,6 +39,17 @@ class ImageCollectionTest(BaseIntegrationTest): self.tmp_imgs.append(image.id) assert client.containers.run(image) == b"hello world\n" + def test_build_with_success_build_output(self): + client = docker.from_env(version=TEST_API_VERSION) + image = client.images.build( + tag='dup-txt-tag', fileobj=io.BytesIO( + "FROM alpine\n" + "CMD echo Successfully built abcd1234".encode('ascii') + ) + ) + self.tmp_imgs.append(image.id) + assert client.containers.run(image) == b"Successfully built abcd1234\n" + def test_list(self): client = docker.from_env(version=TEST_API_VERSION) image = client.images.pull('alpine:latest')