mirror of
https://github.com/docker/docs.git
synced 2026-03-29 23:38:56 +07:00
Hard-coding the API version to '1.18' with the docker-py constructor will cause the docker-py logic at https://github.com/docker/docker-py/blob/master/docker/client.py#L143-L146 to always fail, which will cause authentication issues if you're using a remote daemon using API version 1.19 - regardless of the API version of the registry. Allow the user to set the API version via an environment variable. If the variable is not present, it will still default to '1.18' like it does today. Signed-off-by: Reilly Herrewig-Pope <reilly.herrewigpope@mandiant.com>
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from docker import Client
|
|
from docker import tls
|
|
import ssl
|
|
import os
|
|
|
|
|
|
def docker_client():
|
|
"""
|
|
Returns a docker-py client configured using environment variables
|
|
according to the same logic as the official Docker client.
|
|
"""
|
|
cert_path = os.environ.get('DOCKER_CERT_PATH', '')
|
|
if cert_path == '':
|
|
cert_path = os.path.join(os.environ.get('HOME', ''), '.docker')
|
|
|
|
base_url = os.environ.get('DOCKER_HOST')
|
|
api_version = os.environ.get('COMPOSE_API_VERSION', '1.18')
|
|
|
|
tls_config = None
|
|
|
|
if os.environ.get('DOCKER_TLS_VERIFY', '') != '':
|
|
parts = base_url.split('://', 1)
|
|
base_url = '%s://%s' % ('https', parts[1])
|
|
|
|
client_cert = (os.path.join(cert_path, 'cert.pem'), os.path.join(cert_path, 'key.pem'))
|
|
ca_cert = os.path.join(cert_path, 'ca.pem')
|
|
|
|
tls_config = tls.TLSConfig(
|
|
ssl_version=ssl.PROTOCOL_TLSv1,
|
|
verify=True,
|
|
assert_hostname=False,
|
|
client_cert=client_cert,
|
|
ca_cert=ca_cert,
|
|
)
|
|
|
|
timeout = int(os.environ.get('DOCKER_CLIENT_TIMEOUT', 60))
|
|
return Client(base_url=base_url, tls=tls_config, version=api_version, timeout=timeout)
|