diff options
author | Joffrey F <joffrey@docker.com> | 2017-06-19 15:50:28 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2017-06-19 15:50:28 -0700 |
commit | 39bb78ac694d8d6e53882d3dbc9ebc3c92f5519d (patch) | |
tree | 1e23c2651663966f76c7ff35c486545f39e04b67 | |
parent | bb82bcf7841107399ef04633b7c638380fbc9d9a (diff) | |
download | docker-py-39bb78ac694d8d6e53882d3dbc9ebc3c92f5519d.tar.gz |
Add network_mode support to Client.build1397-build-network
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/api/build.py | 22 | ||||
-rw-r--r-- | docker/models/images.py | 11 | ||||
-rw-r--r-- | tests/integration/api_build_test.py | 33 |
3 files changed, 56 insertions, 10 deletions
diff --git a/docker/api/build.py b/docker/api/build.py index f30be41..cbef4a8 100644 --- a/docker/api/build.py +++ b/docker/api/build.py @@ -18,7 +18,7 @@ class BuildApiMixin(object): custom_context=False, encoding=None, pull=False, forcerm=False, dockerfile=None, container_limits=None, decode=False, buildargs=None, gzip=False, shmsize=None, - labels=None, cache_from=None, target=None): + labels=None, cache_from=None, target=None, network_mode=None): """ Similar to the ``docker build`` command. Either ``path`` or ``fileobj`` needs to be set. ``path`` can be a local path (to a directory @@ -88,14 +88,16 @@ class BuildApiMixin(object): - cpusetcpus (str): CPUs in which to allow execution, e.g., ``"0-3"``, ``"0,1"`` decode (bool): If set to ``True``, the returned stream will be - decoded into dicts on the fly. Default ``False``. + decoded into dicts on the fly. Default ``False`` shmsize (int): Size of `/dev/shm` in bytes. The size must be - greater than 0. If omitted the system uses 64MB. - labels (dict): A dictionary of labels to set on the image. + greater than 0. If omitted the system uses 64MB + labels (dict): A dictionary of labels to set on the image cache_from (list): A list of images used for build cache - resolution. + resolution target (str): Name of the build-stage to build in a multi-stage - Dockerfile. + Dockerfile + network_mode (str): networking mode for the run commands during + build Returns: A generator for the build output. @@ -208,6 +210,14 @@ class BuildApiMixin(object): 'target was only introduced in API version 1.29' ) + if network_mode: + if utils.version_gte(self._version, '1.25'): + params.update({'networkmode': network_mode}) + else: + raise errors.InvalidVersion( + 'network_mode was only introduced in API version 1.25' + ) + if context is not None: headers = {'Content-Type': 'application/tar'} if encoding: diff --git a/docker/models/images.py b/docker/models/images.py index 7e999b0..d4e24c6 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -144,12 +144,15 @@ class ImageCollection(Collection): - cpushares (int): CPU shares (relative weight) - cpusetcpus (str): CPUs in which to allow execution, e.g., ``"0-3"``, ``"0,1"`` - decode (bool): If set to ``True``, the returned stream will be - decoded into dicts on the fly. Default ``False``. + shmsize (int): Size of `/dev/shm` in bytes. The size must be + greater than 0. If omitted the system uses 64MB + labels (dict): A dictionary of labels to set on the image cache_from (list): A list of images used for build cache - resolution. + resolution target (str): Name of the build-stage to build in a multi-stage - Dockerfile. + Dockerfile + network_mode (str): networking mode for the run commands during + build Returns: (:py:class:`Image`): The built image. diff --git a/tests/integration/api_build_test.py b/tests/integration/api_build_test.py index 623b660..609964f 100644 --- a/tests/integration/api_build_test.py +++ b/tests/integration/api_build_test.py @@ -5,6 +5,7 @@ import tempfile from docker import errors +import pytest import six from .base import BaseAPIIntegrationTest @@ -211,6 +212,38 @@ class BuildTest(BaseAPIIntegrationTest): info = self.client.inspect_image('build1') self.assertEqual(info['Config']['OnBuild'], []) + @requires_api_version('1.25') + def test_build_with_network_mode(self): + script = io.BytesIO('\n'.join([ + 'FROM busybox', + 'RUN wget http://google.com' + ]).encode('ascii')) + + stream = self.client.build( + fileobj=script, network_mode='bridge', + tag='dockerpytest_bridgebuild' + ) + + self.tmp_imgs.append('dockerpytest_bridgebuild') + for chunk in stream: + pass + + assert self.client.inspect_image('dockerpytest_bridgebuild') + + script.seek(0) + stream = self.client.build( + fileobj=script, network_mode='none', + tag='dockerpytest_nonebuild', nocache=True, decode=True + ) + + self.tmp_imgs.append('dockerpytest_nonebuild') + logs = [chunk for chunk in stream] + assert 'errorDetail' in logs[-1] + assert logs[-1]['errorDetail']['code'] == 1 + + with pytest.raises(errors.NotFound): + self.client.inspect_image('dockerpytest_nonebuild') + def test_build_stderr_data(self): control_chars = ['\x1b[91m', '\x1b[0m'] snippet = 'Ancient Temple (Mystic Oriental Dream ~ Ancient Temple)' |