soa*_*gem 5 amazon-web-services amazon-ecs
我正在尝试使用 AWS CLI 重新标记图像并开始怀疑本指南已过时。我将许多 Docker 映像推送到 ECR 存储库中 - 我们称其为“myappserver”。所以我可以运行这样的命令来查看 ECR 存储库中所有图像的列表:
aws ecr describe-images --repository-name myappserver
Run Code Online (Sandbox Code Playgroud)
我从该命令获得的输出如下所示:
{
"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
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
因为并非我的所有图像都不再有标签,所以我想通过 imageDigest(而不是像指南那样使用 imageTag)来识别它们,这应该没问题。但是,指南提供的命令似乎不再起作用。它说:
使用 batch-get-image 命令获取要重新标记的图像的图像清单并将其写入环境变量。在此示例中,存储库 amazonlinux 中带有标签 latest 的映像的清单被写入环境变量 MANIFEST。
MANIFEST=$(aws ecr batch-get-image --repository-name amazonlinux --image-ids imageTag=latest --query images[].imageManifest --output text)
因此,很自然地,我尝试运行此命令:
aws ecr batch-get-image --repository-name myappserver --image-ids imageDigest=sha256:1234... --query images[].imageManifest --output text
Run Code Online (Sandbox Code Playgroud)
但我在终端得到的回应是:
zsh: no matches found: images[].imageManifest
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我省略最后两个参数(--query images[].imageManifest和--output text),那么该命令会成功并返回一些 JSON。因此,我尝试将该 JSON 手动复制/粘贴到环境变量中 - 特别是复制标记为“imageManifest”的部分。然后,使用该环境变量(我将MANIFEST其命名为与指南使用的命名法保持一致),我尝试运行以下命令:
aws ecr put-image --repository-name myappserver --image-tag new-tag --image-manifest "$MANIFEST"
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下错误消息:
An error occurred (InvalidParameterException) when calling the PutImage operation: Invalid parameter at 'ImageManifest' failed to satisfy constraint: 'Invalid JSON syntax'
Run Code Online (Sandbox Code Playgroud)
据我所知,我复制到put-image命令中的 JSON 输出是有效的,尽管有这个错误。而且我也很困惑为什么我无法batch-get-image使用提供的参数运行命令。我该怎么做才能使这些命令起作用,并向我的图像添加标签?
小智 5
您收到一个 shell 错误 ( zsh),表明通配符表达式images[].imageManifest与本地磁盘上的任何文件都不匹配。
尝试使用引号:
--query 'images[].imageManifest'
Run Code Online (Sandbox Code Playgroud)
而不是这个:
--query images[].imageManifest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6718 次 |
| 最近记录: |