diff --git a/docker/api/build.py b/docker/api/build.py index b303ba64..6bfaba10 100644 --- a/docker/api/build.py +++ b/docker/api/build.py @@ -1,6 +1,7 @@ import logging import os import re +import json from .. import constants from .. import errors @@ -16,7 +17,7 @@ class BuildApiMixin(object): nocache=False, rm=False, stream=False, timeout=None, custom_context=False, encoding=None, pull=False, forcerm=False, dockerfile=None, container_limits=None, - decode=False): + decode=False, buildargs=None): remote = context = headers = None container_limits = container_limits or {} if path is None and fileobj is None: @@ -71,6 +72,14 @@ class BuildApiMixin(object): } params.update(container_limits) + if buildargs: + if utils.version_gte(self._version, '1.21'): + params.update({'buildargs': json.dumps(buildargs)}) + else: + raise errors.InvalidVersion( + 'buildargs was only introduced in API version 1.21' + ) + if context is not None: headers = {'Content-Type': 'application/tar'} if encoding: diff --git a/tests/integration/build_test.py b/tests/integration/build_test.py index 289c0fe4..1f5ed9e1 100644 --- a/tests/integration/build_test.py +++ b/tests/integration/build_test.py @@ -96,3 +96,18 @@ class BuildTest(api_test.BaseTestCase): list(filter(None, logs.split('\n'))), ['not-ignored'], ) + + @requires_api_version('1.21') + def test_build_with_buildargs(self): + script = io.BytesIO('\n'.join([ + 'FROM scratch', + 'ARG test', + 'USER $test' + ]).encode('ascii')) + + self.client.build(fileobj=script, tag='buildargs', + buildargs={'test': 'OK'}, stream=True) + self.tmp_imgs.append('buildargs') + + info = self.client.inspect_image('buildargs') + self.assertEqual(info['Config']['User'], 'OK')