docker_client.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import logging
  2. import os
  3. import ssl
  4. from docker import Client
  5. from docker import tls
  6. from ..const import HTTP_TIMEOUT
  7. log = logging.getLogger(__name__)
  8. def docker_client():
  9. """
  10. Returns a docker-py client configured using environment variables
  11. according to the same logic as the official Docker client.
  12. """
  13. cert_path = os.environ.get('DOCKER_CERT_PATH', '')
  14. if cert_path == '':
  15. cert_path = os.path.join(os.environ.get('HOME', ''), '.docker')
  16. base_url = os.environ.get('DOCKER_HOST')
  17. api_version = os.environ.get('COMPOSE_API_VERSION', '1.19')
  18. tls_config = None
  19. if os.environ.get('DOCKER_TLS_VERIFY', '') != '':
  20. parts = base_url.split('://', 1)
  21. base_url = '%s://%s' % ('https', parts[1])
  22. client_cert = (os.path.join(cert_path, 'cert.pem'), os.path.join(cert_path, 'key.pem'))
  23. ca_cert = os.path.join(cert_path, 'ca.pem')
  24. tls_config = tls.TLSConfig(
  25. ssl_version=ssl.PROTOCOL_TLSv1,
  26. verify=True,
  27. assert_hostname=False,
  28. client_cert=client_cert,
  29. ca_cert=ca_cert,
  30. )
  31. if 'DOCKER_CLIENT_TIMEOUT' in os.environ:
  32. log.warn('The DOCKER_CLIENT_TIMEOUT environment variable is deprecated. Please use COMPOSE_HTTP_TIMEOUT instead.')
  33. return Client(base_url=base_url, tls=tls_config, version=api_version, timeout=HTTP_TIMEOUT)