Unable to pull image from private registry
pat-tpz opened this issue · comments
Hi !
Using tox-docker 3.x we are not able to pull image hosted on our private registry.
Image name in the configuration looks like private-registry:5000/namespace/image-name:1.0.0
Look at the tox-docker code we can see that the image name is "partitionned"
name, _, tag = image.partition(":")
in our case, name
is private-registry
and tag
is 5000/namespace/image-name:1.0.0
Fix proposal :
image_name_part = image.split(":")
tag = image_name_part.pop()
name = ":".join(image_name_part)
The stack
Traceback (most recent call last):
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/client.py", line 268, in _raise_for_status
response.raise_for_status()
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/requests/models.py", line 953, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http+docker://localhost/v1.41/images/private-registry:5000/namespace/image-name:1.0.0/json
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox_docker/__init__.py", line 260, in tox_runtest_pre
docker.images.get(image)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/models/images.py", line 314, in get
return self.prepare_model(self.client.api.inspect_image(name))
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/image.py", line 251, in inspect_image
return self._result(
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/client.py", line 274, in _result
self._raise_for_status(response)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/client.py", line 270, in _raise_for_status
raise create_api_error_from_http_exception(e)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation)
docker.errors.ImageNotFound: 404 Client Error for http+docker://localhost/v1.41/images/private-registry:5000/namespace/image-name:1.0.0/json: Not Found ("no such image: private-registry:5000/namespace/image-name:1.0.0: No such image: private-registry:5000/namespace/image-name:1.0.0")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/client.py", line 268, in _raise_for_status
response.raise_for_status()
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/requests/models.py", line 953, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.41/images/create?tag=5000%2Fnamespace%2Fimage-name%3A1.0.0&fromImage=private-registry
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox/session/__init__.py", line 203, in cleanup
yield
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox/session/__init__.py", line 197, in runcommand
return self.subcommand_test()
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox/session/__init__.py", line 225, in subcommand_test
run_sequential(self.config, self.venv_dict)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox/session/commands/run/sequential.py", line 22, in run_sequential
runtestenv(venv, config)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox/session/commands/run/sequential.py", line 73, in runtestenv
config.pluginmanager.hook.tox_runtest_pre(venv=venv)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/manager.py", line 84, in <lambda>
self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/callers.py", line 208, in _multicall
return outcome.get_result()
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tox_docker/__init__.py", line 264, in tox_runtest_pre
docker.images.pull(name, tag=tag or None)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/models/images.py", line 444, in pull
pull_log = self.client.api.pull(
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/image.py", line 428, in pull
self._raise_for_status(response)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/api/client.py", line 270, in _raise_for_status
raise create_api_error_from_http_exception(e)
File "/home/acme/.pyenv/versions/3.9.4/lib/python3.9/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 400 Client Error for http+docker://localhost/v1.41/images/create?tag=5000%2Fnamespace%2Fimage-name%3A1.0.0&fromImage=private-registry: Bad Request ("invalid tag format")
I've just released https://pypi.org/project/tox-docker/4.0.0a1/, which contains this fix (and other improvements). Please let me know if it works for you, or especially if it doesn't!