docker_client.py 1.2 KB

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