summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2017-06-19 15:50:28 -0700
committerJoffrey F <joffrey@docker.com>2017-06-19 15:50:28 -0700
commit39bb78ac694d8d6e53882d3dbc9ebc3c92f5519d (patch)
tree1e23c2651663966f76c7ff35c486545f39e04b67
parentbb82bcf7841107399ef04633b7c638380fbc9d9a (diff)
downloaddocker-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.py22
-rw-r--r--docker/models/images.py11
-rw-r--r--tests/integration/api_build_test.py33
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)'