mirror of https://github.com/docker/docker-py.git
Add network_mode support to Client.build
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
bb82bcf784
commit
39bb78ac69
|
@ -18,7 +18,7 @@ class BuildApiMixin(object):
|
||||||
custom_context=False, encoding=None, pull=False,
|
custom_context=False, encoding=None, pull=False,
|
||||||
forcerm=False, dockerfile=None, container_limits=None,
|
forcerm=False, dockerfile=None, container_limits=None,
|
||||||
decode=False, buildargs=None, gzip=False, shmsize=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``
|
Similar to the ``docker build`` command. Either ``path`` or ``fileobj``
|
||||||
needs to be set. ``path`` can be a local path (to a directory
|
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.,
|
- cpusetcpus (str): CPUs in which to allow execution, e.g.,
|
||||||
``"0-3"``, ``"0,1"``
|
``"0-3"``, ``"0,1"``
|
||||||
decode (bool): If set to ``True``, the returned stream will be
|
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
|
shmsize (int): Size of `/dev/shm` in bytes. The size must be
|
||||||
greater than 0. If omitted the system uses 64MB.
|
greater than 0. If omitted the system uses 64MB
|
||||||
labels (dict): A dictionary of labels to set on the image.
|
labels (dict): A dictionary of labels to set on the image
|
||||||
cache_from (list): A list of images used for build cache
|
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
|
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:
|
Returns:
|
||||||
A generator for the build output.
|
A generator for the build output.
|
||||||
|
@ -208,6 +210,14 @@ class BuildApiMixin(object):
|
||||||
'target was only introduced in API version 1.29'
|
'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:
|
if context is not None:
|
||||||
headers = {'Content-Type': 'application/tar'}
|
headers = {'Content-Type': 'application/tar'}
|
||||||
if encoding:
|
if encoding:
|
||||||
|
|
|
@ -144,12 +144,15 @@ class ImageCollection(Collection):
|
||||||
- cpushares (int): CPU shares (relative weight)
|
- cpushares (int): CPU shares (relative weight)
|
||||||
- cpusetcpus (str): CPUs in which to allow execution, e.g.,
|
- cpusetcpus (str): CPUs in which to allow execution, e.g.,
|
||||||
``"0-3"``, ``"0,1"``
|
``"0-3"``, ``"0,1"``
|
||||||
decode (bool): If set to ``True``, the returned stream will be
|
shmsize (int): Size of `/dev/shm` in bytes. The size must be
|
||||||
decoded into dicts on the fly. Default ``False``.
|
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
|
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
|
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:
|
Returns:
|
||||||
(:py:class:`Image`): The built image.
|
(:py:class:`Image`): The built image.
|
||||||
|
|
|
@ -5,6 +5,7 @@ import tempfile
|
||||||
|
|
||||||
from docker import errors
|
from docker import errors
|
||||||
|
|
||||||
|
import pytest
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from .base import BaseAPIIntegrationTest
|
from .base import BaseAPIIntegrationTest
|
||||||
|
@ -211,6 +212,38 @@ class BuildTest(BaseAPIIntegrationTest):
|
||||||
info = self.client.inspect_image('build1')
|
info = self.client.inspect_image('build1')
|
||||||
self.assertEqual(info['Config']['OnBuild'], [])
|
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):
|
def test_build_stderr_data(self):
|
||||||
control_chars = ['\x1b[91m', '\x1b[0m']
|
control_chars = ['\x1b[91m', '\x1b[0m']
|
||||||
snippet = 'Ancient Temple (Mystic Oriental Dream ~ Ancient Temple)'
|
snippet = 'Ancient Temple (Mystic Oriental Dream ~ Ancient Temple)'
|
||||||
|
|
Loading…
Reference in New Issue