Как мне пометить изображение в ECR? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь следовать вместе с Повторной маркировкой изображения с помощью AWS CLI и начинаю подозревать, что это руководство устарело. У меня есть несколько образов Docker, помещенных в репозиторий ECR - назовем это «myappserver». И поэтому я могу запустить такие команды, как эта, чтобы увидеть список всех изображений в репозитории ECR:

aws ecr describe-images --repository-name myappserver

Вывод этой команды выглядит примерно так:

{
    "imageDetails": [
        {
            "registryId": "123456789012",
            "repositoryName": "myappserver",
            "imageDigest": "sha256:1234...",
            "imageSizeInBytes": 33805114,
            "imagePushedAt": 1525881170.0
        },
        {
            "registryId": "123456789012",
            "repositoryName": "myappserver",
            "imageDigest": "sha256:1234...",
            "imageTags": [
                "latest"
            ],
            "imageSizeInBytes": 333805137,
            "imagePushedAt": 1525892193.0
        },
        ...
    ]
}

Поскольку не все мои изображения уже имеют теги, я хочу идентифицировать их с помощью imageDigest (а не imageTag, как в руководстве), что должно быть хорошо. Однако команда, которую предлагает руководство, похоже, больше не работает. Там написано:

Используйте команду batch-get-image, чтобы получить манифест изображения для изображения, чтобы пометить его и записать в переменную среды. В этом примере манифест для изображения с тегом last в хранилище amazonlinux записывается в переменную среды MANIFEST.

MANIFEST = $ (aws ecr batch-get-image - имя-хранилища amazonlinux --image-ids imageTag = последние - запросы изображений []. ImageManifest - вывод текста)

Итак, естественно, я пытаюсь запустить эту команду:

aws ecr batch-get-image --repository-name myappserver --image-ids imageDigest=sha256:1234... --query images[].imageManifest --output text

Но я получаю ответ в терминале:

zsh: no matches found: images[].imageManifest

Интересно, что если я пропущу последние два параметра (--query images[].imageManifest и --output text), то эта команда завершится успешно и вернет немного JSON. Поэтому я попытался вручную скопировать / вставить этот JSON в переменную окружения, в частности, скопировав раздел с названием «imageManifest». Затем, используя эту переменную среды (которую я назвал MANIFEST, чтобы она соответствовала номенклатуре, используемой в руководстве), я попытался выполнить эту команду:

aws ecr put-image --repository-name myappserver --image-tag new-tag --image-manifest "$MANIFEST"

Однако, это приводит к следующему сообщению об ошибке:

An error occurred (InvalidParameterException) when calling the PutImage operation: Invalid parameter at 'ImageManifest' failed to satisfy constraint: 'Invalid JSON syntax'

Насколько я могу судить, вывод JSON, который я скопировал в команду put-image , действителен , несмотря на эту ошибку. И меня также смущает, почему я не могу запустить команду batch-get-image с предоставленными аргументами. Что я могу сделать, чтобы эти команды работали и добавляли теги к моему изображению?

1 Ответ

0 голосов
/ 24 мая 2018

Вы получаете сообщение об ошибке оболочки (zsh), которое говорит, что подстановочное выражение images[].imageManifest не соответствует ни одному файлу на вашем локальном диске.

Попробуйте использовать кавычки:

--query 'images[].imageManifest'

вместо этого:

--query images[].imageManifest
...