将 docker 容器从本地推送到 aws ecr

Posted

技术标签:

【中文标题】将 docker 容器从本地推送到 aws ecr【英文标题】:Push docker container from locak to aws ecr 【发布时间】:2020-09-09 21:41:53 【问题描述】:

当我尝试将标记的 docker repo 推送到 ecr 时,我收到错误:

 ->  ~  docker push 169729465422.dkr.ecr.eu-west-1.amazonaws.com:latest                                                                                                                                                                                           1 ↵  1834  00:14:14
The push refers to repository [docker.io/library/169729465422.dkr.ecr.eu-west-1.amazonaws.com]
a41ec2e4dc40: Preparing
62b872ff53d4: Preparing
a628002c2154: Preparing
9f15c5e37d02: Preparing
efdebd147565: Preparing
32411a9a984e: Waiting
1bd26e8168dc: Waiting
ffc9b21953f4: Waiting
denied: requested access to the resource is denied

用户拥有推送图片的所有权限? :

我已按照步骤标记图像:

aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin 169729465422.dkr.ecr.eu-west-1.amazonaws.com

docker tag cda-flask-app:latest 169729465422.dkr.ecr.eu-west-1.amazonaws.com

docker push 169729465422.dkr.ecr.eu-west-1.amazonaws.com

我已经按照文档 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration 使用 aws configure 配置了 CLI。我不相信我错过了任何步骤,但是当我尝试推送图像时,我收到了权限问题。我需要完成一个额外的步骤才能将图像从本地推送到 ecr 吗?

更新:

使用:

docker tag cda-flask-app:latest 169729465422.dkr.ecr.eu-west-1.amazonaws.com       

docker push 169729465422.dkr.ecr.eu-west-1.amazonaws.com/cda-flask-app:latest

返回错误:

The push refers to repository [169729465422.dkr.ecr.eu-west-1.amazonaws.com/cda-flask-app]
a41ec2e4dc40: Preparing
62b872ff53d4: Preparing
a628002c2154: Preparing
9f15c5e37d02: Preparing
efdebd147565: Preparing
32411a9a984e: Waiting
1bd26e8168dc: Waiting
ffc9b21953f4: Waiting
name unknown: The repository with name 'cda-flask-app' does not exist in the registry with id '169729465422'

【问题讨论】:

【参考方案1】:

问题在于图像名称。如果应该是repository/image:tag的形式。

在你的情况下应该是169729465422.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest

如果没有/,docker 会尝试将带有latest 标签的图像169729465422.dkr.ecr.eu-west-1.amazonaws.com 推送到默认注册表docker.io

在将图像推送到 ECR 之前,您需要使用“创建存储库按钮”在 ECR 控制台中创建“存储库”:

【讨论】:

谢谢,请查看问题更新,我是否按照您的指示正确操作? 可以,但您需要先在 ACR 中创建“存储库”。术语“存储库”有点误导,因为 ECR 应该已经是一个存储库,但我真的不知道如何命名它。【参考方案2】:

不过可能有点晚了:

你的 ECR 存储库应该像你的图片一样命名,所以如果你推送

docker push 169729465422.dkr.ecr.eu-west-1.amazonaws.com/cda-flask-app:latest

那么您在 ECR 中的存储库也应命名为 cda-flask-app。这就是为什么 docker 没有找到正确的存储库。

【讨论】:

谢谢。本地映像名称应与 AWS ECR 存储库 URI 匹配。

以上是关于将 docker 容器从本地推送到 aws ecr的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI - Docker 推送到 AWS ECR

Docker 推送到 AWS ECR 私有存储库失败,JSON 格式错误

Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用

AWS ECR Repository - 如何从一个账户复制图像并推送到另一个账户

将映像从 aws ecr 部署到 aws elastic beanstalk

Github 操作将 docker 部署到 AWS ECS ECR