Я хочу перечислить все образы Docker моего реестра артефактов в Google Cloud Platform. Поэтому я обращаюсь к REST API.
Следуя этой документации: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.dockerImages/list
curl -X GET --location "https://artifactregistry.googleapis.com/v1/my-project-id/europe-west3/eu.gcr.io/dockerImages?key=AIzaSyBDf2452534f7Y5PfKRjsdgs%12342432TIGrI" --http1.1 \
-H "Authorization: Bearer ya29.aFGDggsGSDGSHG4253h2ATzmAsT8dYhWoGm7dG1n7Cj-YYgfk-VIV9e-m22gDQnJ-5X7zSB2dgqyj2_T4ZL6yjaDAb8YWCFpKh64UZ-lYjVj1MYnATA7ZiR7AqTPGvL4NbH-MG2q48Fg_NtesOrC4rOHoSyRMrYxFQyuYg4MIXFfsdf23513JSSDGSDASDASDGYSDGw0177" \
-H "Accept: application/json"
Ответ:
HTTP/1.1 404 Not Found
Date: Tue, 09 Apr 2024 09:28:17 GMT
Content-Type: text/html; charset=UTF-8
Server: ESF
Content-Length: 1659
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Alt-Svc: h3 = ":443"; ma=2592000,h3-29 = ":443"; ma=2592000
Функция «Попробуйте этот метод» в документации также выдает ошибки.
Довольно запутанно, поскольку я уверен, что соответствую шаблону регулярного выражения, который им требуется:
/^projects/[^/]+/locations/[^/]+/repositories/[^/]+$/
Есть идеи, что я делаю неправильно? Я думаю, что как-то путаю параметр resource, но не могу найти ни одного примера для этого запроса, который привел бы меня к правильному использованию.

Это может привести к тому, что когда клиент указывает заголовок Accept при запросе манифеста изображения, и этот заголовок не включает формат, который имеет изображение, реестр артефактов отвечает статусом 404 Not Found и выдает ошибку.
Реестр артефактов поддерживает несколько форматов изображений, но клиент может поддерживать только некоторые из них. Клиент должен отправить поддерживаемый формат в заголовке Accept, и если он отличается от фактического типа контента изображения, он получает ошибку 404 Not Found, которая интерпретируется как отсутствующее изображение.
Вы можете проверить формат изображения, хранящегося в AR, с помощью такой команды:
curl -s -D - -o /dev/null '
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://[Region]-docker.pkg.dev/v2/[Project]/[Repository]/[Image]/manifests/latest
Исправлено: загрузите изображение в формате, поддерживаемом клиентом. Вы можете конвертировать форматы изображений с помощью команды skopeo copy:
skopeo copy -f v2s2 docker://[Region]-docker.pkg.dev/[Project]//:latest docker://-docker.pkg.dev/[Repository]/[Image]/:latest docker://[Region]-docker.pkg.dev/[Project]/[Repository]/[Image]:[Tag2]
Также взгляните на эту Документацию и ссылку на Stackoverflow.
Я только что понял, что мне не хватает сегмента пути проекта -> /project/[project-id]. Я думал, что в документации был проект в качестве заполнителя для фактического идентификатора проекта.
Я с нетерпением жду ваших отзывов, чтобы понять, помогло ли предоставленное решение вам решить проблему. Если нет, я буду рад помочь дальше.