Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
docker-py
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
docker-py
Commits
f95b9584
Kaydet (Commit)
f95b9584
authored
Ock 09, 2018
tarafından
Joffrey F
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Add support for experimental platform flag in build and pull
Signed-off-by:
Joffrey F
<
joffrey@docker.com
>
üst
bf5e7702
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
54 additions
and
7 deletions
+54
-7
build.py
docker/api/build.py
+9
-1
image.py
docker/api/image.py
+11
-2
containers.py
docker/models/containers.py
+6
-2
images.py
docker/models/images.py
+2
-0
api_build_test.py
tests/integration/api_build_test.py
+15
-0
api_image_test.py
tests/integration/api_image_test.py
+10
-1
models_containers_test.py
tests/unit/models_containers_test.py
+1
-1
No files found.
docker/api/build.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -19,7 +19,7 @@ class BuildApiMixin(object):
forcerm
=
False
,
dockerfile
=
None
,
container_limits
=
None
,
decode
=
False
,
buildargs
=
None
,
gzip
=
False
,
shmsize
=
None
,
labels
=
None
,
cache_from
=
None
,
target
=
None
,
network_mode
=
None
,
squash
=
None
,
extra_hosts
=
None
):
squash
=
None
,
extra_hosts
=
None
,
platform
=
None
):
"""
Similar to the ``docker build`` command. Either ``path`` or ``fileobj``
needs to be set. ``path`` can be a local path (to a directory
...
...
@@ -103,6 +103,7 @@ class BuildApiMixin(object):
single layer.
extra_hosts (dict): Extra hosts to add to /etc/hosts in building
containers, as a mapping of hostname to IP address.
platform (str): Platform in the format ``os[/arch[/variant]]``
Returns:
A generator for the build output.
...
...
@@ -243,6 +244,13 @@ class BuildApiMixin(object):
extra_hosts
=
utils
.
format_extra_hosts
(
extra_hosts
)
params
.
update
({
'extrahosts'
:
extra_hosts
})
if
platform
is
not
None
:
if
utils
.
version_lt
(
self
.
_version
,
'1.32'
):
raise
errors
.
InvalidVersion
(
'platform was only introduced in API version 1.32'
)
params
[
'platform'
]
=
platform
if
context
is
not
None
:
headers
=
{
'Content-Type'
:
'application/tar'
}
if
encoding
:
...
...
docker/api/image.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -323,7 +323,8 @@ class ImageApiMixin(object):
return
self
.
_result
(
self
.
_post
(
url
,
params
=
params
),
True
)
def
pull
(
self
,
repository
,
tag
=
None
,
stream
=
False
,
insecure_registry
=
False
,
auth_config
=
None
,
decode
=
False
):
insecure_registry
=
False
,
auth_config
=
None
,
decode
=
False
,
platform
=
None
):
"""
Pulls an image. Similar to the ``docker pull`` command.
...
...
@@ -336,6 +337,7 @@ class ImageApiMixin(object):
:py:meth:`~docker.api.daemon.DaemonApiMixin.login` has set for
this request. ``auth_config`` should contain the ``username``
and ``password`` keys to be valid.
platform (str): Platform in the format ``os[/arch[/variant]]``
Returns:
(generator or str): The output
...
...
@@ -376,7 +378,7 @@ class ImageApiMixin(object):
}
headers
=
{}
if
utils
.
compare_version
(
'1.5'
,
self
.
_version
)
>=
0
:
if
utils
.
version_gte
(
self
.
_version
,
'1.5'
)
:
if
auth_config
is
None
:
header
=
auth
.
get_config_header
(
self
,
registry
)
if
header
:
...
...
@@ -385,6 +387,13 @@ class ImageApiMixin(object):
log
.
debug
(
'Sending supplied auth config'
)
headers
[
'X-Registry-Auth'
]
=
auth
.
encode_header
(
auth_config
)
if
platform
is
not
None
:
if
utils
.
version_lt
(
self
.
_version
,
'1.32'
):
raise
errors
.
InvalidVersion
(
'platform was only introduced in API version 1.32'
)
params
[
'platform'
]
=
platform
response
=
self
.
_post
(
self
.
_url
(
'/images/create'
),
params
=
params
,
headers
=
headers
,
stream
=
stream
,
timeout
=
None
...
...
docker/models/containers.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -579,6 +579,8 @@ class ContainerCollection(Collection):
inside the container.
pids_limit (int): Tune a container's pids limit. Set ``-1`` for
unlimited.
platform (str): Platform in the format ``os[/arch[/variant]]``.
Only used if the method needs to pull the requested image.
ports (dict): Ports to bind inside the container.
The keys of the dictionary are the ports to bind inside the
...
...
@@ -700,7 +702,9 @@ class ContainerCollection(Collection):
if
isinstance
(
image
,
Image
):
image
=
image
.
id
stream
=
kwargs
.
pop
(
'stream'
,
False
)
detach
=
kwargs
.
pop
(
"detach"
,
False
)
detach
=
kwargs
.
pop
(
'detach'
,
False
)
platform
=
kwargs
.
pop
(
'platform'
,
None
)
if
detach
and
remove
:
if
version_gte
(
self
.
client
.
api
.
_version
,
'1.25'
):
kwargs
[
"auto_remove"
]
=
True
...
...
@@ -718,7 +722,7 @@ class ContainerCollection(Collection):
container
=
self
.
create
(
image
=
image
,
command
=
command
,
detach
=
detach
,
**
kwargs
)
except
ImageNotFound
:
self
.
client
.
images
.
pull
(
image
)
self
.
client
.
images
.
pull
(
image
,
platform
=
platform
)
container
=
self
.
create
(
image
=
image
,
command
=
command
,
detach
=
detach
,
**
kwargs
)
...
...
docker/models/images.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -157,6 +157,7 @@ class ImageCollection(Collection):
single layer.
extra_hosts (dict): Extra hosts to add to /etc/hosts in building
containers, as a mapping of hostname to IP address.
platform (str): Platform in the format ``os[/arch[/variant]]``.
Returns:
(:py:class:`Image`): The built image.
...
...
@@ -265,6 +266,7 @@ class ImageCollection(Collection):
:py:meth:`~docker.client.DockerClient.login` has set for
this request. ``auth_config`` should contain the ``username``
and ``password`` keys to be valid.
platform (str): Platform in the format ``os[/arch[/variant]]``
Returns:
(:py:class:`Image`): The image that has been pulled.
...
...
tests/integration/api_build_test.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -377,3 +377,18 @@ class BuildTest(BaseAPIIntegrationTest):
def
test_build_gzip_custom_encoding
(
self
):
with
self
.
assertRaises
(
errors
.
DockerException
):
self
.
client
.
build
(
path
=
'.'
,
gzip
=
True
,
encoding
=
'text/html'
)
@requires_api_version
(
'1.32'
)
@requires_experimental
(
until
=
None
)
def
test_build_invalid_platform
(
self
):
script
=
io
.
BytesIO
(
'FROM busybox
\n
'
.
encode
(
'ascii'
))
with
pytest
.
raises
(
errors
.
APIError
)
as
excinfo
:
stream
=
self
.
client
.
build
(
fileobj
=
script
,
stream
=
True
,
platform
=
'foobar'
)
for
_
in
stream
:
pass
assert
excinfo
.
value
.
status_code
==
400
assert
'invalid platform'
in
excinfo
.
exconly
()
tests/integration/api_image_test.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -14,7 +14,7 @@ from six.moves import socketserver
import
docker
from
..helpers
import
requires_api_version
from
..helpers
import
requires_api_version
,
requires_experimental
from
.base
import
BaseAPIIntegrationTest
,
BUSYBOX
...
...
@@ -67,6 +67,15 @@ class PullImageTest(BaseAPIIntegrationTest):
img_info
=
self
.
client
.
inspect_image
(
'hello-world'
)
self
.
assertIn
(
'Id'
,
img_info
)
@requires_api_version
(
'1.32'
)
@requires_experimental
(
until
=
None
)
def
test_pull_invalid_platform
(
self
):
with
pytest
.
raises
(
docker
.
errors
.
APIError
)
as
excinfo
:
self
.
client
.
pull
(
'hello-world'
,
platform
=
'foobar'
)
assert
excinfo
.
value
.
status_code
==
500
assert
'invalid platform'
in
excinfo
.
exconly
()
class
CommitTest
(
BaseAPIIntegrationTest
):
def
test_commit
(
self
):
...
...
tests/unit/models_containers_test.py
Dosyayı görüntüle @
f95b9584
...
...
@@ -225,7 +225,7 @@ class ContainerCollectionTest(unittest.TestCase):
container
=
client
.
containers
.
run
(
'alpine'
,
'sleep 300'
,
detach
=
True
)
assert
container
.
id
==
FAKE_CONTAINER_ID
client
.
api
.
pull
.
assert_called_with
(
'alpine'
,
tag
=
None
)
client
.
api
.
pull
.
assert_called_with
(
'alpine'
,
platform
=
None
,
tag
=
None
)
def
test_run_with_error
(
self
):
client
=
make_fake_client
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment