把docker图像推到亚马逊ecs仓库

Im新的AWS。 我想在AWS ECS容器实例上设置私有Docker存储库。 我创build了一个名为name的存储库。 AWS显示的示例push命令正在工作。

 aws ecr get-login --region us-west-2 docker build -t name . docker tag name:latest ############.dkr.ecr.us-west-2.amazonaws.com/name:latest docker push ############.dkr.ecr.us-west-2.amazonaws.com/name:latest 

但是用这个命令,我build立并推送了一个名为name的图像,我想要build立一个名为foo的图像。 所以我改变了命令:

 docker build -t foo . docker tag foo ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo docker push ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo 

这应该可以工作,但事实并非如此。 经过一段时间的回顾,我得到的错误:

 The push refers to a repository [###########.dkr.ecr.us-west-2.amazonaws.com/name/foo] 8cc63cf4528f: Retrying in 1 second ... name unknown: The repository with name 'name/foo' does not exist in the registry with id '############' 

AWS是否真的需要一个专门的存储库来存放我想要推送的每一张图片?

EC2容器registry需要为要发布到registry的每个映像“名称”或“名称空间/名称”设置映像存储库 。

您可以在每个Repository中发布任何您想要的:tags (默认限制为100个标签)。

我没有在AWS文档中的任何地方明确指出存储库 – >映像名称映射,但是它隐含在创build存储库 – ECR用户指南中的第6d部分

Docker Image规范包括它的存储库定义

知识库

在一个公共前缀下分组的标签集合(名称组件:之前)。 例如,在名为my-app:3.1.4 ,my-app是名称的Repository组件。 存储库名称由斜杠分隔的名称组件组成,可以select以DNS主机名作为前缀。 主机名必须符合标准DNS规则,但不能包含_字符。 如果存在主机名,则可以select后跟一个:8080格式的端口号。 名称组件可能包含小写字符,数字和分隔符。 分隔符被定义为句点,一个或两个下划线或一个或多个破折号。 名称组件不能以分隔符开始或结束。

不需要为每个图像创build一个回购,只需重新命名:

 docker build -t foo . docker tag foo ####.dkr.ecr.us-west-2.amazonaws.com/name:foo_v0.23.1 docker push ####.dkr.ecr.us-west-2.amazonaws.com/name:foo_v0.23.1