Дайджест образа Docker отличается от итогового дайджеста после отправки в реестр контейнеров Github

У меня есть конвейер CI в Github Actions, который создает и отправляет образ докера, затем у меня есть отдельный репозиторий, в котором есть действие, которое я запускаю из командной строки, которое принимает в качестве аргумента образ докера, который затем применяет его к Kustomize. шаблон

Вот пример этого CI

docker build . -t ghcr.io/myOrg/myApp:${{ commitSha }}
docker push ghcr.io/myOrg/myRepo:${{ commitSha }}

gh workflow run update_image.yml -R myOrg/myInfraRepo -f image=ghcr.io/myOrg/myRepo@$(docker images --no-trunc --quiet ghcr.io/myOrg/myApp:${{ commitSha }})

При тестировании весь поток работает и запускает рабочий процесс с изображением и дайджестом, однако дайджест не кажется правильным.

Когда я проверяю контейнер через пакеты github, я вижу следующий манифест

{
  "digest": "sha256:9e32f9292cbe63d27374fd467ad5e530112cbfddf17c250ca90e087bdfcd436e",
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "size": 1998,
  "config": {
    "digest": "sha256:6f7e582643c22f4e41021be851bb0394c0e326e8fe06c7d3e890316d1a0234e9",
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 8755
  },
  "layers": [
...

Оба дайджеста разные, и вывод docker images --no-trunc --quiet был дайджестом под config.digest, а не дайджестом верхнего уровня. Я не понимаю, почему они разные, это дайджест реестра? Если да, то как я могу получить этот дайджест через командную строку?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, мне удалось это решить. Я использовал неправильную команду для получения дайджеста.

docker images --no-trunc --quiet ghcr.io/myOrg/myApp:${{ commitSha }}

Это работает, но это только локальный дайджест. Заменил на это из здесь

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE

который возвращает полное имя и удаленный дайджест. Итак, теперь моя последняя команда выглядит так:

gh workflow run update_image.yml -R myOrg/myInfraRepo -f image=$(docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/myOrg/myApp:${{ commitSha }})

Другие вопросы по теме