Docker images not properly requested from docker API
Metadata
Current evaluation
Fixed in canonical/charmcraft#1854 (commit 1d2413a3), which corrected Docker image reference formatting and re-enabled the upload-resource test disabled by #1761.
Resolution: closed resolved
Reason: PR #1854 was merged with commit 1d2413a3, resolving the invalid Docker API requests and reverting the temporary test disablement introduced by PR #1761.
Evaluated by: mr-cal-bot
No scores available.
Issue body
### Bug Description
When trying to upload a resource from docker, we don't always provide the correct reference format to the API.
### To Reproduce
`charmcraft upload-resource gh-ci-charmcraft-charm example-image --image=docker://hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346`
See: https://github.com/canonical/charmcraft/actions/runs/10076354372/job/27857360756?pr=1759#step:4:656
### Environment
CI
### charmcraft.yaml
```shell
n/a
```
### Relevant log output
```shell
+ charmcraft upload-resource gh-ci-charmcraft-charm example-image --image=docker://hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346
2024-07-24 12:36:49.345 Starting charmcraft, version 3.1.0.post3+gc802b0b
2024-07-24 12:36:49.345 Logging execution to '/root/.local/state/charmcraft/log/charmcraft-20240724-123649.344660.log'
2024-07-24 12:36:49.345 Log verbosity level set to DEBUG
2024-07-24 12:36:49.345 Configuring application...
2024-07-24 12:36:49.346 Preparing application...
2024-07-24 12:36:49.347 Build plan: platform=None, build_for=None
2024-07-24 12:36:49.348 Running charmcraft upload-resource on host
2024-07-24 12:36:49.349 Storing credentials for 'charmcraft' on 'api.staging.charmhub.io' in keyring 'auth MemoryKeyring'.
2024-07-24 12:36:49.349 Getting image
2024-07-24 12:36:49.349 Trying to get image from Docker
2024-07-24 12:36:49.349 Setting up ImageService
2024-07-24 12:36:49.389 charmcraft internal error: APIError(HTTPError('400 Client Error: Bad Request for url: /v1.43/images/docker:/hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346/json'))
2024-07-24 12:36:49.506 Traceback (most recent call last):
2024-07-24 12:36:49.506 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 275, in _raise_for_status
2024-07-24 12:36:49.506 response.raise_for_status()
2024-07-24 12:36:49.506 File "/snap/charmcraft/x1/lib/python3.10/site-packages/requests/models.py", line 1021, in raise_for_status
2024-07-24 12:36:49.506 raise HTTPError(http_error_msg, response=self)
2024-07-24 12:36:49.506 requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: /v1.43/images/docker:/hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346/json
2024-07-24 12:36:49.507
2024-07-24 12:36:49.507 The above exception was the direct cause of the following exception:
2024-07-24 12:36:49.507 Traceback (most recent call last):
2024-07-24 12:36:49.507 File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/application.py", line 538, in run
2024-07-24 12:36:49.507 return_code = dispatcher.run() or 0
2024-07-24 12:36:49.507 File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 487, in run
2024-07-24 12:36:49.507 return self._loaded_command.run(self._parsed_command_args)
2024-07-24 12:36:49.507 File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/application/commands/store.py", line 1958, in run
2024-07-24 12:36:49.507 if digest := image_service.get_maybe_id_from_docker(parsed_args.image):
2024-07-24 12:36:49.507 File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/services/image.py", line 107, in get_maybe_id_from_docker
2024-07-24 12:36:49.508 image = self._docker.images.get(name)
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/models/images.py", line 333, in get
2024-07-24 12:36:49.508 return self.prepare_model(self.client.api.inspect_image(name))
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/utils/decorators.py", line 19, in wrapped
2024-07-24 12:36:49.508 return f(self, resource_id, *args, **kwargs)
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/image.py", line 251, in inspect_image
2024-07-24 12:36:49.508 return self._result(
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 281, in _result
2024-07-24 12:36:49.508 self._raise_for_status(response)
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 277, in _raise_for_status
2024-07-24 12:36:49.508 raise create_api_error_from_http_exception(e) from e
2024-07-24 12:36:49.508 File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/errors.py", line 39, in create_api_error_from_http_exception
2024-07-24 12:36:49.509 raise cls(e, response=response, explanation=explanation) from e
2024-07-24 12:36:49.509 docker.errors.APIError: 400 Client Error for /v1.43/images/docker:/hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346/json: Bad Request ("invalid reference format")
2024-07-24 12:36:49.509 Full execution log: '/root/.local/state/charmcraft/log/charmcraft-20240724-123649.344660.log'
Traceback (most recent call last):
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 275, in _raise_for_status
response.raise_for_status()
File "/snap/charmcraft/x1/lib/python3.10/site-packages/requests/models.py", line 1021, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: /v1.43/images/docker:/hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346/json
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/snap/charmcraft/x1/bin/charmcraft", line 8, in <module>
sys.exit(main())
File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/application/main.py", line 160, in main
return app.run()
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/application.py", line 538, in run
return_code = dispatcher.run() or 0
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 487, in run
return self._loaded_command.run(self._parsed_command_args)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/application/commands/store.py", line 1958, in run
if digest := image_service.get_maybe_id_from_docker(parsed_args.image):
File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/services/image.py", line 107, in get_maybe_id_from_docker
image = self._docker.images.get(name)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/models/images.py", line 333, in get
return self.prepare_model(self.client.api.inspect_image(name))
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/image.py", line 251, in inspect_image
return self._result(
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 281, in _result
self._raise_for_status(response)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/api/client.py", line 277, in _raise_for_status
raise create_api_error_from_http_exception(e) from e
File "/snap/charmcraft/x1/lib/python3.10/site-packages/docker/errors.py", line 39, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation) from e
docker.errors.APIError: 400 Client Error for /v1.43/images/docker:/hello-world@sha256:18a657d0cc1c7d0678a3fbea8b7eb4918bba25968d3e1b0adebfa71caddbc346/json: Bad Request ("invalid reference format")
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha | — | closed resolved | Fixed in canonical/charmcraft#1854 (commit 1d2413a3), which corrected Docker image reference formatting and re-enabled the upload-resource test disabled by #1761. | |
| stealth/space-bunny-alpha | — | closed resolved | Fixed in canonical/charmcraft#1854 via commit 1d2413a3: Docker image references are now formatted correctly, and #1761's temporary test disablement was reverted. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Closed and moved to internal tracking (CRAFT-3148). The bug triggers a 400 error when passing the docker:// prefix to the Docker API. A fix is pending, requiring a revert of PR #1761 before implementation. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed after being resolved by reverting PR #1761, which corrected Docker API reference formatting for resource uploads. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed and moved to an internal tracker. The bug causes 400 API errors due to malformed Docker image references. Fix implementation requires reverting PR #1761. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Closed. Fix pending to strip the docker:// scheme when querying the Docker API and revert PR #1761. |
Update history
No update history recorded yet.
Related work
-
Likely Fixed By:
canonical/charmcraft#1854
(confidence 100%)
Merged fix for Docker API image-reference formatting.
-
Related To:
canonical/charmcraft#1761
(confidence 100%)
Temporarily disabled the failing spread test; its disablement was reverted by #1854.
Related issues
No related issues found above the similarity threshold.