diff options
-rw-r--r-- | docker/client.py | 8 | ||||
-rw-r--r-- | docker/utils/utils.py | 4 | ||||
-rw-r--r-- | tests/unit/utils_test.py | 5 |
3 files changed, 11 insertions, 6 deletions
diff --git a/docker/client.py b/docker/client.py index fb186cc..7d1f7c4 100644 --- a/docker/client.py +++ b/docker/client.py @@ -45,17 +45,17 @@ class Client( timeout=constants.DEFAULT_TIMEOUT_SECONDS, tls=False): super(Client, self).__init__() - if tls and (not base_url or not base_url.startswith('https://')): + if tls and not base_url: raise errors.TLSParameterError( - 'If using TLS, the base_url argument must begin with ' - '"https://".') + 'If using TLS, the base_url argument must be provided.' + ) self.base_url = base_url self.timeout = timeout self._auth_configs = auth.load_config() - base_url = utils.parse_host(base_url, sys.platform) + base_url = utils.parse_host(base_url, sys.platform, tls=bool(tls)) if base_url.startswith('http+unix://'): self._custom_adapter = unixconn.UnixAdapter(base_url, timeout) self.mount('http+docker://', self._custom_adapter) diff --git a/docker/utils/utils.py b/docker/utils/utils.py index 1ce1867..dc46f1e 100644 --- a/docker/utils/utils.py +++ b/docker/utils/utils.py @@ -345,7 +345,7 @@ def parse_repository_tag(repo_name): # fd:// protocol unsupported (for obvious reasons) # Added support for http and https # Protocol translation: tcp -> http, unix -> http+unix -def parse_host(addr, platform=None): +def parse_host(addr, platform=None, tls=False): proto = "http+unix" host = DEFAULT_HTTP_HOST port = None @@ -381,7 +381,7 @@ def parse_host(addr, platform=None): raise errors.DockerException( "Invalid bind address protocol: {0}".format(addr) ) - proto = "http" + proto = "https" if tls else "http" if proto != "http+unix" and ":" in addr: host_parts = addr.split(':') diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py index 83d2a98..63ea10e 100644 --- a/tests/unit/utils_test.py +++ b/tests/unit/utils_test.py @@ -360,6 +360,11 @@ class ParseHostTest(base.BaseTestCase): assert parse_host(val, 'win32') == tcp_port + def test_parse_host_tls(self): + host_value = 'myhost.docker.net:3348' + expected_result = 'https://myhost.docker.net:3348' + self.assertEqual(parse_host(host_value, None, True), expected_result) + class ParseRepositoryTagTest(base.BaseTestCase): sha = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' |