Skip to content

Commit be831c1

Browse files
committed
Don't fallback to HTTP unless insecure_registry is specified when pushing/pulling
1 parent c76fd8d commit be831c1

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

docker/auth/auth.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,22 @@ def swap_protocol(url):
3434
return url
3535

3636

37-
def expand_registry_url(hostname):
37+
def expand_registry_url(hostname, insecure=False):
3838
if hostname.startswith('http:') or hostname.startswith('https:'):
3939
if '/' not in hostname[9:]:
4040
hostname = hostname + '/v1/'
4141
return hostname
4242
if utils.ping('https://' + hostname + '/v1/_ping'):
4343
return 'https://' + hostname + '/v1/'
44-
return 'http://' + hostname + '/v1/'
44+
elif insecure:
45+
return 'http://' + hostname + '/v1/'
46+
else:
47+
raise errors.DockerException(
48+
"HTTPS endpoint unresponsive and insecure mode isn't enabled."
49+
)
4550

4651

47-
def resolve_repository_name(repo_name):
52+
def resolve_repository_name(repo_name, insecure=False):
4853
if '://' in repo_name:
4954
raise errors.InvalidRepository(
5055
'Repository name cannot contain a scheme ({0})'.format(repo_name))
@@ -56,11 +61,12 @@ def resolve_repository_name(repo_name):
5661
raise errors.InvalidRepository(
5762
'Invalid repository name ({0})'.format(repo_name))
5863

59-
if 'index.docker.io' in parts[0]:
64+
if 'index.docker.io' in parts[0] or 'registry.hub.docker.com' in parts[0]:
6065
raise errors.InvalidRepository(
61-
'Invalid repository name, try "{0}" instead'.format(parts[1]))
66+
'Invalid repository name, try "{0}" instead'.format(parts[1])
67+
)
6268

63-
return expand_registry_url(parts[0]), parts[1]
69+
return expand_registry_url(parts[0], insecure), parts[1]
6470

6571

6672
def resolve_authconfig(authconfig, registry=None):

docker/client.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -713,10 +713,13 @@ def port(self, container, private_port):
713713

714714
return h_ports
715715

716-
def pull(self, repository, tag=None, stream=False):
716+
def pull(self, repository, tag=None, stream=False,
717+
insecure_registry=False):
717718
if not tag:
718719
repository, tag = utils.parse_repository_tag(repository)
719-
registry, repo_name = auth.resolve_repository_name(repository)
720+
registry, repo_name = auth.resolve_repository_name(
721+
repository, insecure=insecure_registry
722+
)
720723
if repo_name.count(":") == 1:
721724
repository, tag = repository.rsplit(":", 1)
722725

@@ -747,10 +750,13 @@ def pull(self, repository, tag=None, stream=False):
747750
else:
748751
return self._result(response)
749752

750-
def push(self, repository, tag=None, stream=False):
753+
def push(self, repository, tag=None, stream=False,
754+
insecure_registry=False):
751755
if not tag:
752756
repository, tag = utils.parse_repository_tag(repository)
753-
registry, repo_name = auth.resolve_repository_name(repository)
757+
registry, repo_name = auth.resolve_repository_name(
758+
repository, insecure=insecure_registry
759+
)
754760
u = self._url("/images/{0}/push".format(repository))
755761
params = {
756762
'tag': tag

0 commit comments

Comments
 (0)