Я пытаюсь следовать вместе с Повторной маркировкой изображения с помощью 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
с предоставленными аргументами. Что я могу сделать, чтобы эти команды работали и добавляли теги к моему изображению?