我正在尝试将docker镜像推送到Amazon ECR注册表.我正在使用docker客户端Docker版本1.9.1,构建a34a1d5.我使用"aws ecr get-login --region us-east-1"来获取docker登录信息.然后,我成功登录这些信用如下:
docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded
Run Code Online (Sandbox Code Playgroud)
但是当我尝试推送我的图像时,我收到以下错误:
$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials
Run Code Online (Sandbox Code Playgroud)
我确保aws用户拥有正确的权限.我还确保存储库允许该用户推送它.为了确保这不是问题,我将注册表设置为允许所有用户完全访问.没有任何更改"无基本身份验证凭据"错误.由于所有流量都已加密,我不知道如何开始调试.
UPDATE
所以当我意识到问题的根本原因时,我有一点荷马辛普森D'哦.我可以访问多个AWS账户.即使我使用aws configure为我设置存储库的帐户设置我的凭据,但aws cli实际上使用的是环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY.因此,当我执行aws ecr get-login时,它返回了错误帐户的登录信息.我没注意到帐号是不同的,直到我现在回去尝试一些建议的答案.当我删除环境变量时,一切正常.我想故事的座右铭是,如果您遇到此错误,请确保您登录的存储库与您应用于图像的标记相匹配.
我创建了EKS Cluster.我在ECR中也有码头图像.我不知道如何在YAML中使用pod定义中的docker镜像.
是否需要秘密提供凭证?或者EKS IAM角色应该获得ECR的许可吗?
权限的任何更改都必须为ECR中的Image做?
我有一张带有 2 个标签的图像(在 AWS ECR 中),我只想删除一个标签。
我可以使用以下方法轻松地从本地环境中删除:
docker rmi <REPOSITORY>:<TAG>
我想从 ECR 中删除它。任何帮助,将不胜感激。
我们想要将docker映像从非产品复制到产品ECR帐户。是否可以不拉,重新拉紧和再次推动它。
我很好奇是否有一种方法可以设置一个通用的生命周期策略,该策略将应用于 ECR 中的所有存储库?
目前,据我了解,没有办法做到这一点。
我正在考虑的一种方法是使用生命周期策略的 JSON 定义,并使用 AWS CLI 将其应用到所有存储库(可以稍微自动化一些)。但是这个东西应该在每次创建新存储库时运行,这会增加复杂性。
基本上,我需要使用ECS容器的Bitbucket源代码配置CI / CD。我想使用CodePipline将新的ECR映像部署到ECS。
当前,AWS CodePipline中没有选项将bitbucket指定为源。但是,我设法通过Webhooks配置CodeBuild,因此它会构建docker文件,并在每次发布发布分支时将其推送到ECR。
我想将ECR配置为CodePipline中的“源”阶段,并将其部署到现有的ECS群集/服务中,因此部署将自动进行。
不幸的是,如果在部署步骤中出现以下错误,则会导致基本配置和工件链接:
Invalid action configuration
The image definition file imageDetail.json contains invalid JSON format
Run Code Online (Sandbox Code Playgroud)
尽管“ Amazon ECR”阶段将imageDetail.json作为输出工件提供,但“ Amazon ECS”部署提供程序似乎并不期望这样做。有什么合理的方法解决这个问题吗?
我知道,可以使用bitbucket + API Gateway / Lambda + CodePipeline配置CI / CD,我也考虑使用CodeCommit代替bitbucket作为源存储库-仍然,希望有一种可能的优雅解决方案,将bitbucket与直接使用CodePipeline。
UPD: 我得到的配置非常好,如本博文所述:总体思路是允许CodeBuild将源代码从bitbucket上传到S3,然后使用CodePipeline和S3作为源将新的docker映像部署到ECR并发布ECS集群中新的任务定义修订。S3仍在开销中,我正在为该任务寻找更优雅的解决方案。
我使用的是 Windows 10 和 Docker Desktop Engine 19.03.5。
我正在尝试创建一个 AWS ECR 存储库并推送图像。
aws ecr get-login --no-include-email # successful
docker login -u AWS -p eyJwYXlsb2F... # failed
Run Code Online (Sandbox Code Playgroud)
错误:
保存凭据时出错:存储凭据时出错 - 错误:退出状态 1,输出:
error storing credentials - err: exit status 1, out:
没有足够的内存资源可用于处理此命令。
足够的内存和磁盘空间。
我能够使用 获取令牌来访问 aws ecr get-login-password
。默认授权令牌的有效期为 12 小时。无论如何我可以修改默认值吗?
我在 SourceAccount 的 ECR Repo 中推送了一个 docker 镜像。
我已经在 SourceAccount 中部署了一个代码管道。
当该代码管道运行时,它会在 TargetAccount 中部署 ECS 堆栈。在该堆栈中,ECS 任务是使用来自 SourceAccount 的上述镜像通过容器创建的。但是,这些任务仍处于挂起状态并最终转移到停止状态。他们显示以下错误:
Status reason CannotPullContainerError: Error response from daemon: pull access denied for <SourceAccountId>.dkr.ecr.<Region>.amazonaws.com/<RepoName>, repository does not exist or may require 'docker login'
Run Code Online (Sandbox Code Playgroud)
请告知如何从 SourceAccount ECR 中提取图像并在 TargetAccount 中创建 ECS 任务。
笔记:
1) 当我在 TargetAccount 的 ECR 中推送相同的图像时,一切正常。ECS 任务仅在尝试从其他帐户拉取映像时无法运行。
2) 堆栈回滚,出现以下错误:
Service arn:aws:ecs:<Region>:<TargetAccount>:service/<ServiceName> did not stabilize.
Run Code Online (Sandbox Code Playgroud) amazon-ecs aws-cloudformation docker aws-codepipeline aws-ecr
aws-ecr ×10
amazon-ecs ×3
docker ×3
amazon-ecr ×1
amazon-eks ×1
aws-cli ×1
aws-ecs ×1
aws-eks ×1